nested_resources_pathを更に改良してみた。

遠回り。それもまた、道也。」で作ったメソッドを、更に改良した。

  def nested_resources_path(nested_resources, nested_resource_id = nil)
    parent_resource = request.env["REQUEST_PATH"].sub(/\/#{nested_resources}(\/*[0-9]*)($|\/.*$)/, "")
    if nested_resource_id
      return "#{parent_resource}/#{nested_resources.to_s}/#{nested_resource_id}"
    else
      return "#{parent_resource}/#{nested_resources.to_s}#{$1}"
    end
  end


で、

  • nested_resourcesに指定したリソースをネストした状態(/*親リソース*/*親リソースid*/nested_resources)で、pathを返す
  • nested_resource_idを指定している場合、/*親リソース*/*親リソースid*/nested_resources/nested_resource_idを返す
  • メソッドを呼び出した際のpathがnested_resourcesを含んでいる場合、/*親リソース*/*親リソースid*/nested_resourcesを返す
  • メソッドを呼び出した際のpathがnested_resourceのidを含んでいる場合、そのアクションに関わらず、/*親リソース*/*親リソースid*/nested_resources/nested_resource_idを返す #=> NEW!


さて。
これで、

  • partial内で、link_toのリンク先が、そのpartialに持たせた変数内から算出することが出来る
  • partial内で、form_forのurlが、そのpartialに持たせた変数内から算出することが出来る
  • partial内で、form_forのアクションが、updateかcreateか(postかpushか)を気にせずに済む


かな。
実質、モデル・オブジェクトを放り込んでるのと変わらない効果が得られるでしょう。
...ホントに?www


よし。
オレってカッチョイーwww