- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ruby/Ruby on Rails

はじめに Edit

ネストしたリソース(nested resouces)についてのメモ。

確認した環境は、Rails 2.3.2 なので注意してください

config/routes.rbでの設定 Edit

まずは、config/routes.rbでの設定記述ですが、
/items/:items_id/sub_items/:id みたいなURLを生成したい場合。

1
2
3
map.resources :items do |item|
  item.resources(:sub_items)
end

もしくは、

1
map.resources :items, :has_many => :sub_items

のように書きます。

パスを得る方法 Edit

/items/10/sub_items にアクセスしたい場合は、

items_sub_items_path(10)

のようにするとパスを得られます。
引数はidですが、この際 @items が定義されていると、(ローカル変数itemsでもいいのかな?)

items_sub_items_path

と引数を省略できるみたいです。

でも、挙動がイマイチわからん!この辺て、リファレンスのどこ見りゃいいだろ…
(evalってurl_forあたりが呼ばれてる感じがする)

ルーティングがどうなっているかわからないよヽ(`Д´)ノ ウワァァン!! Edit

適当に config/routes.rb 弄ってみたけど、何がなにやら…という時

つ rake routes

$ rake routes
(in D:/my_project/my_project)
       results GET    /results(.:format) {:action=>"index", :controller=>"results"}
               POST   /results(.:format) {:action=>"create", :controller=>"results"}
    new_result GET    /results/new(.:format) {:action=>"new", :controller=>"results"}
   edit_result GET    /results/:id/edit(.:format) {:action=>"edit", :controller=>"results"}
        result GET    /results/:id(.:format) {:action=>"show", :controller=>"results"}
               PUT    /results/:id(.:format) {:action=>"update", :controller=>"results"}
               DELETE /results/:id(.:format)
 :

これで、ルーティングがどうなっているか、
hoge_path みたいに書く時のプリフィックス?も大体わかります。

ネストするような複雑?なルーティングする時に確認は必須かと。

本題:疑問点 ネストしたりソースで特定のメソッド(Action)にアクセスするには? Edit

button_toや(その内部で使われている)url_forなどで、ネストしたリソースのコントローラーのメソッド(Action)にアクセスできるようにするには、どうしたらよいのかな?
→map.resources :sub_items, :collection => {:hoge => :post}のようにルーティングを追加定義して、rake routesして確認しつつ…
かなあ? :collectionは場合に応じて :memberや:new を使う。

[TODO]:ネストしたリソースの疑問点を解消する


No comment. Comments/Ruby/Ruby on Rails/ネストしたリソース(nested resources)?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2009-07-10 Fri 18:00:51 JST (2994d)