以下を参考にさせて頂きました。
http://d.hatena.ne.jp/zariganitosh/20080203/1202091772
やりたいのは、こういうパスを表示すること。
/realestates/1/images/
/realestates/1/images/1
まずは対応するコントローラーを作成
$ script/generate controller 'realestates/image' index show
routes.rb を修正
方法1: has_manyを追加。
→うまくいかない。
http://xxxx/realestates/1/images/1/
を表示しようとすると ImageContolller#show にアクセスしている。
ImagesController のインスタンスがないと言われる。
Realestates::ImagesController に紐づけたい。
$ vi config/routes.rb ... map.resources :realestates, :has_many => :images ...
方法2: do 記法で対応。
→うまくいかない。方法1と同じ結果。
$ vi config/routes.rb ... map.resources :realestates map.resources :realestates do |realestates| realestates.resources :images end ...
方法3: map.namespaceをmap.resourcesの後ろに設置
→うまくいかない。
これは /realesatates/images/1 は表示できる。
Realesates:ImagesContollerに紐づけるやり方。
/realestates/1/images/1 は表示できない。
$ vi config/routes.rb ... map.namespace :realestates do |realestates| realestates.resources :images end map.resources :realestates ...
方法4: Realestates::ImagesControllerをあきらめ、RealestatesImagesControllerに変更
→うまくいった!
コントローラーを作りなおして、map.resources で、コントローラーを明示的に指定した。
/realestates/1/images/1 は表示できる。
$ script/destroy controller 'realestates/images' index show $ script/generate controller 'realestates_images' index show
... map.resources :realestates map.resources :realestates do |realestates| realestates.resources :images, :controller => :realestates_images end ...
下記URLとRailsのソースは参考になりました。
http://api.rubyonrails.org/classes/ActionController/Resources.html
http://api.rubyonrails.org/classes/ActionController/Routing.html
値の取得
/realestates/1/images/1 からそれぞれの数字は、/realesates/:realestate_id/images/:id なので、params[:realestate_id], params[:id]で取得できる。
課題
/realestates/1/images/1に、Realesatates::ImagesControllerを割り当てたい。Railsの思想的におかしいことなのだろうか。
以下の本を読んで勉強したいと思う。