我在routes.rb中定义了以下自定义Rails路由:
resources :projects do
get 'members'
end
这导致以下路线(来自rake路线的输出):
project_members GET /projects/:project_id/members(.:format)
但我想要的是路由映射到此(更改:project_id to:id)
project_members GET /projects/:id/members(.:format)
我怎样才能实现这一目标?
答案 0 :(得分:3)
成员是嵌套资源吗?如果是这样,请将其定义为一个,并了解这就是路由中: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
,该控制器知道:id
定义了该控制器模型的实例,并且任何其他命名的id属于其他资源。
否则我认为您只需要将其定义为成员方法:
resources :projects do
member do
get 'members'
end
end
这告诉路由,行为members
是属于project
实例的非资源行为,我认为应该将你排除在外,但要确保它是正确的。