A partir de Rails 2.3, no es posible cambiar el nombre del parámetro y seguir utilizando el enrutamiento automático que proporciona #resources
.
Como solución alternativa, puede asignar articles
con un :path_prefix
y :name_prefix
:
map.resources :articles, :path_prefix => "https://stackoverflow.com/users/:login",
:name_prefix => "user_"
El :path_prefix
afecta la URL y el :name_prefix
afecta a las rutas con nombre generados, por lo que va a terminar con estas rutas:
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"}
Como regla empírica general, sin embargo, me quedo con la convención por defecto rieles de :user_id
, con el enrutamiento informados en su pregunta. En general, se entiende que :id
y :user_id
no implican necesariamente "identificador numérico": implican "identificador de recursos", cualquiera que sea. Y al seguir la convención predeterminada, su código será más fácil de entender para cualquier persona que haya utilizado rutas de recursos en Rails.
Para usar un identificador no numérico para un recurso, simplemente redefina #to_param
en su modelo. Luego, asegúrese de usar un buscador en su controlador que encontrará por este identificador (en lugar de la identificación numérica), como User#find_by_login!
.
p.s. Lo pregunto principalmente porque el sistema de enrutamiento de Merb tiene esta capacidad. – newtonapple