gpt4 book ai didi

ruby-on-rails - 如何强制自定义 Rails 路由使用 :id instead of :_id

转载 作者:行者123 更新时间:2023-12-04 02:39:48 25 4
gpt4 key购买 nike

我在 routes.rb 中定义了以下自定义 Rails 路由:

resources :projects do
get 'members'
end

这导致以下路线(rake 路线的输出):

project_members GET        /projects/:project_id/members(.:format)

不过,我想要的是将路由映射到此(将 :project_id 更改为 :id)

project_members GET        /projects/:id/members(.:format)

我怎样才能做到这一点?

最佳答案

成员是嵌套资源吗?如果这样将其定义为一个,并理解这就是为什么你在路由中有 :project_id 的原因,因为嵌套资源中的 :id 被最终的子项使用 -您不能让多个嵌套资源都使用同一个变量来定义它们的 ID。

resources :projects do 
resources :members
end

加上第三层嵌套,解释起来就更清楚了:

resources :projects do 
resources :members do
resources :colours
end
end

通过这种嵌套,您可以访问 app/projects/:project_id/members/:member_id/colours/:id ,它将由 colours Controller 提供服务,它知道:id 定义了该 Controller 模型的一个实例,任何其他命名的 id 都属于其他资源。

否则我认为你只需要将它定义为一个成员方法:

resources :projects do
member do
get 'members'
end
end

这告诉路由,操作 members 是一个属于 project 实例的非资源操作,我认为这应该可以解决问题,但请确保它是正确的做法。

参见 2.10 of Rails Routing from the Outside In 部分

关于ruby-on-rails - 如何强制自定义 Rails 路由使用 :id instead of :<model>_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134502/

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