And*_* R. 3 routes ruby-on-rails custom-routes
我在routes.rb中定义了以下自定义Rails路由:
resources :projects do
get 'members'
end
Run Code Online (Sandbox Code Playgroud)
这会产生以下路由(来自 rake 路由的输出):
project_members GET /projects/:project_id/members(.:format)
Run Code Online (Sandbox Code Playgroud)
不过,我想要的是映射到此的路线(将 :project_id 更改为 :id)
project_members GET /projects/:id/members(.:format)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
成员是嵌套资源吗?如果是这样,请将其定义为一个,并理解这就是您:project_id在路由中使用的原因,因为:id嵌套资源由最终子项使用 - 您不能让多个嵌套资源全部使用相同的变量来定义其 id。
resources :projects do
resources :members
end
Run Code Online (Sandbox Code Playgroud)
添加第三层嵌套,解释起来会更清楚一些:
resources :projects do
resources :members do
resources :colours
end
end
Run Code Online (Sandbox Code Playgroud)
通过这种嵌套,您可以访问控制器app/projects/:project_id/members/:member_id/colours/:id将提供的服务colours,该控制器知道:id定义了该控制器模型的实例,并且任何其他命名的 id 都属于其他资源。
否则我认为你只需将其定义为成员方法:
resources :projects do
member do
get 'members'
end
end
Run Code Online (Sandbox Code Playgroud)
这告诉路由该操作members是属于 实例的非资源操作project,我认为这应该可以解决您的问题,但请确保这是正确的做法。