resourcesにルーティングを足す
Railsのルーティングの設定にはresourcesという主要7アクションのセットがある。でもそれにルーティングを加えたい時がある。そんな時は、collectionかmemberを書く。
routes.rb
resources :items do
collection do
post :confirm
post :review
end
member do
get :sample
get :thumbnail
end
end
●collectionとmemberの違い
「 collectionには:idがつかない。memberには:idがつく 」
この差があるので、idで呼び出すroutingかどうかで使い分けるべき
<ルーティングテーブル>
confirm_items_path POST /items/confirm(.:format) items#confirm
review_items_path POST /items/review(.:format) items#review
sample_items_path GET /items/:id/sample(.:format) items#sample
thumbnail_items_path GET /items/:id/thumbnail(.:format) items#thumbnail
●違う使い方
resources :items do
post :confirm, on :collection
get :review, on :member
get :thumbnail
end
この書き方でもOK。 ちなみに3つ目のcollectionかmemberかを書かなかったものは自動的にmember扱いになります。つまりHTTPリクエストに/:id/がつきます。
プログラミングスクールの最終課題でショッピングサイトを作った際、やはりresourcesの7つのアクションじゃ足りなくなった。その時はcollectionとmemberを使わずにルーティングを直接記述してしまっていたな。あの時作ったものを今から直しに行こう。