routesで引数の設定
メモその2
すごく簡単なことなのかもしれないけれど、
/contents/upload?user_id=1
というURLにしたい場合に、routes.rbで
map.resources :contents map.upload '/contents/upload', :controller => 'contents', :action => 'new'
とすると、
Unknown action No action responded to show
といわれる。これは、/contents以下に対するリクエストをmap.resourcesががんばって勝手に生成してくれてしまっているためみたいで、 ActiveResourceとかそのルーティングとかのドキュメント - moroの日記あたりが参考になる。
ので、どうしてもnewじゃなくてuploadにしたい場合は、
map.resources :contents map.upload '/upload', :controller => 'contents', :action => 'new'
と、contentsをはずせばいい。
で、user_idを渡す場合に、
map.upload '/upload', :controller => 'contents', :action => 'new', :user_id => /\d+/
とか、何かを参考に書いたら、
<%= link_to "Upload content", upload_url(:event_id => @event.id) %>
とすると、
TypeError in Events#show Showing events/show.html.erb where line #28 raised: can't convert Fixnum into String
といわれてしまう。意味わからないので苦し紛れに
map.upload '/upload', :controller => 'contents', :action => 'new'
と、指定している部分を消したら動いた。
ちなみに
map.upload '/upload?event_id=:event_id', :controller => 'contents', :action => 'new', :event_id => /\d+/
は動くけど、望むURLにはならない。
見る人が見るとおかしなことをやってるんだろうな・・・