3

routes.rb,

resources :projects

给出以下路线

/projects/
/projects/:id

在使用嵌套资源时

resources :projects do
  resources :photos
end

它给出了以下路线

/projects/
/projects/:id
/projects/:project_id/photos
/projects/:project_id/photos/:id

这给了我一个问题,因为我必须编写特定于控制器的 before_filter 在params[:id]params[:project_id]for之间进行选择Project.find(params[:project_id] || param[:id])

有什么办法可以改变:project_id所有路线的路线吗?

/projects/
**/projects/:project_id**
/projects/:project_id/photos
/projects/:project_id/photos/:id
4

3 回答 3

2

另一种方法是定义方法,在 ApplicationController 中通过 :project_id 找到当前项目

def current_project
  @current_project ||= Project.find params[:project_id]
end

并在 ProjectController 中重新定义这个方法

def current_project
  @current_project ||= Project.find params[:id]
end

然后,您可以current_project在所有控制器的过滤器中使用

于 2012-03-23T10:22:36.863 回答
1

资源的 id 参数的名称不能更改

但是您可以在资源之前将其重新定义为非休息路径

get "projects/:project_id" => "projects#show"
# etc. for all other 3 methods
于 2012-03-22T19:59:57.667 回答
0

我认为您正在寻找的是浅嵌套:http ://edgeguides.rubyonrails.org/routing.html#nested-resources

往下看2.7.2 浅嵌套

于 2013-08-01T18:45:59.510 回答