Railsのroutingについて

Railsのroutingでは、resourceを考えないといけません。URLもそれに対応していきます。
例えばblogというresourceに対してcommentというresourceが複数ある場合だとcong/routes.rbでは

resources :blog do
   resources :comments
end 

のように書きます。更にnamespaceなど定義する場合だと

namespace :admin do
  resources :blog do
     resources :comments
  end 
end

後、controllerにindexやnew,create,show,edit,update,destroyなどのメソッド以外を追加する場合はcollectionやmemberを使う。この場合このメソッドが扱うresourceが複数か単数かでどちらかを使うか決まりますね。複数だとcollection。

後は、URLの形式がちょっと特別な場合ではgetやpostって直接書く事もある。
Railsがバージョンが3場合だとmatchというのがあって、URLのパターンとそのとき呼び出されるcontrollerとactionを定義するものだったけど、それはRails4から使えなくなった。

で、話ずれますが先日resourceが上のblogとcommentの関係でblogのshowページにcommentの投稿欄を付けようとしてform_forタグを使って書いたのですが、その時の書き方が良く分かってなくて(すみません)なので、それも参考情報としてメモ

<%= form_for(@comment, url: admin_blog_comments_path) do |f| %>
  <%= f.label :message %>:<%= f.text_area :message, :size => "90x30" %><br/>
  <%= f.submit %>
<% end %>

namespaceがなければ、以下のようにも書ける(はず)

<%= form_for([@blog,@comment]) do |f| %>
  <%= f.label :message %>:<%= f.text_area :message, :size => "90x30" %><br/>
  <%= f.submit %>
<% end %>

色々あるけど、namespaceあったので最初の書き方を使った。urlオプションで投稿するときのURLのPathをちゃんと指定してやればよかったという話。
ちゃんと考えれば分かる。
以上。
さて、今度はどこやるかな?