Rails 2.3以降、パラメータ名を変更することはできませんが、#resources
が提供する自動ルーティングは引き続き使用できます。回避策として
、あなたが:path_prefix
と:name_prefix
でarticles
をマッピングすることができます
map.resources :articles, :path_prefix => "https://stackoverflow.com/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
を再定義するだけです。次に、User#find_by_login!
のように、このID(数字のIDではなく)で検索するファインダーをコントローラーで使用してください。
p.s.私はMerbのルーティングシステムがこの能力を持っているので主にこれを尋ねます。 – newtonapple