nested_resources_pathを殊更に改良してみた。

nested_resources_pathを更に改良してみた。」で、作ったメソッドを、更に改良した。

  def nested_resources_path(nested_resources, nested_resource_id = nil)
    parent_resource = request.env["REQUEST_PATH"].sub(/\/#{nested_resources}\/([0-9]*)($|\/.*$)/, "")
    nested_resource_id = $1 if nested_resource_id.nil?
    parent_resource = parent_resource.sub(/\/([0-9])($|\/[^\/].*$)/, "")
    parent_resource_id = $1
    return "#{parent_resource}/#{parent_resource_id}/#{nested_resources.to_s}/#{nested_resource_id}"
  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を返す
  • メソッドを呼び出した際のpathが/*親リソース*/*親リソースid*/*親アクション*の場合、/*親リソース*/*親リソースid*/nested_resourcesを返す #=> NEW!


おっ、コレで、/hogehoge/1/editとかでも、機能しますよ:-)
しかも、判定/分岐も無くせたし:-)


だがしかしっ!
この後、驚愕の事実がっ!!