{ :controller => "houses", # -6ren">
gpt4 book ai didi

ruby - Rails 3 路由 : Resource actions and nested resource with :path => "/"

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:55 27 4
gpt4 key购买 nike

我想配置我的 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.我迷路了 - 这可以做到吗?

最佳答案

您尝试做的事情会产生冲突,这就是为什么 Rails 不允许您这样做的原因。

考虑一些用户 bob 有一个名为“edit”的房子的情况。在这种情况下,Rails 应该将“/bob/edit”路由到哪里?有两种可能:

{ :controller => "houses", :action => "show", :user_id => "bob", :id => "edit" }

和:

{ :controller => "users", :action => "edit", :id => "bob" }

因此,要回答您的问题,原样您尝试做的事情只有在消除歧义后才能完成。

更新:

借用@sevenseacat 的回答,我认为这应该做你想做的,在路由/bob/edit 的情况下,用户“bob”的编辑操作优先于名为“edit”的房子的显示操作:

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 路径上方,这保证了在发生冲突时它将获得优先权。 p>

关于ruby - Rails 3 路由 : Resource actions and nested resource with :path => "/",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13140624/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com