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を使わずにルーティングを直接記述してしまっていたな。あの時作ったものを今から直しに行こう。