我想配置我的Rails路由,以便这些案例有效:
/username #=> { :controller => "houses",
# :action => "index",
# :user_id => "username" }
/username/housename #=> { :controller => "houses",
# :action => "show",
# :user_id => "username",
# :id => "housename" }
/username/edit #=> { :controller => "users",
# :action => "edit",
# :id => "username" }
换句话说,我希望/:user_id
成为常规用户资源,并拥有一个嵌套资源,直接挂载在根目录上。所以,我想要/username/housename
而不是/username/houses/housename
。我尝试使用:path => "/"
作为嵌套资源,但这与其他操作(如`:edit)发生冲突。我迷路了 - 可以这样做吗?
答案 0 :(得分:2)
你要做的事情会产生冲突,这就是Rails不让你这么做的原因。
考虑一些用户bob有一个名为“edit”的房子的情况。在这种情况下,Rails应该将'/ bob / edit'路由到哪里?有两种可能性:
{ :controller => "houses", :action => "show", :user_id => "bob", :id => "edit" }
和
{ :controller => "users", :action => "edit", :id => "bob" }
所以要回答你的问题,就是你要做的事情在你消除歧义之前是无法完成的。
更新:
借用@ sevenseacat的答案,我认为这应该做你想要的,在路线/ bob /编辑的情况下优先考虑用户“bob”的编辑操作,对于名为“edit”的房子的show动作:< / p>
resources :users, path: '/', only: :edit
resources :users, path: '/', only: :show do
resources :houses, only: :show, path: ''
end
我得到这些路线:
edit_user GET /:id/edit(.:format) users#edit
user_house GET /:user_id/:id(.:format) houses#show
user GET /:id(.:format) users#show
请注意,edit_user
路径 user_house
路径
答案 1 :(得分:1)
这样的事情可能就是你之后的事情:
resources :users, path: '/', only: [:show, :edit] do
resources :houses, only: [:show], path: ''
end
rake routes
告诉我:
user_house GET /:user_id/:id(.:format) houses#show
edit_user GET /:id/edit(.:format) users#edit
GET /:id(.:format) users#show