Rails 2.3以降、パラメータ名を変更しても、#resources
提供される自動ルーティングを使用することはできません。
articles
回避策として、 a:path_prefix
と:name_prefix
:を使用してマップできます。
map.resources :articles, :path_prefix => "/users/:login",
:name_prefix => "user_"
は:path_prefix
URLに:name_prefix
影響し、は生成された名前付きルートに影響するため、最終的に次のルートになります。
user_articles GET /users/:login/articles(.:format) {:controller=>"articles", :action=>"index"}
POST /users/:login/articles(.:format) {:controller=>"articles", :action=>"create"}
new_user_article GET /users/:login/articles/new(.:format) {:controller=>"articles", :action=>"new"}
edit_user_article GET /users/:login/articles/:id/edit(.:format) {:controller=>"articles", :action=>"edit"}
user_article GET /users/:login/articles/:id(.:format) {:controller=>"articles", :action=>"show"}
PUT /users/:login/articles/:id(.:format) {:controller=>"articles", :action=>"update"}
DELETE /users/:login/articles/:id(.:format) {:controller=>"articles", :action=>"destroy"}
ただし、一般的な経験則として、:user_id
質問に投稿したルーティングを使用して、Railsのデフォルトの規則であるを使用します。一般的に理解されていることですが、必ずしも「数値識別子」を意味するわけでは:id
ありません。「リソース識別子」を意味します。:user_id
また、デフォルトの規則に従うことで、Railsでリソースルートを使用したことのある人なら誰でもコードを理解しやすくなります。
リソースに数値以外の識別子を使用するに#to_param
は、モデルで再定義するだけです。次に、コントローラーで、(数値IDではなく)この識別子で検索するファインダーを使用してくださいUser#find_by_login!
。