通过params [:id]获取自定义操作的包含资源的ID

时间:2013-08-06 17:09:28

标签: ruby-on-rails ruby ruby-on-rails-3 routing

我的config/routes.rb文件中有以下路由:

resources :employees do
  get 'dashboard'
  get 'orientation'
end

employees是指处理标准RESTful操作的常规资源。 dashboardorientation是我目前提到的“自定义操作”,它可以作用于Employee个实例。如果我的术语混淆了,dashboardorientation真的是别的,我道歉。这些自定义操作响应URL,如下所示:

http://myhost/employees/1/dashboard

即。他们是“会员”行为,非常像showedit等。

无论如何,这一切都运作良好。 show上的EmployeesController等常规操作会获取相关Employeeparams[:id]的ID。但是,对于此当前结构,dashboardorientation必须使用params[:employee_id]。这不是很难处理,但会导致一些额外的代码复杂性,因为我的常规before_filter期望params[:id]不适用于这两个操作。

如何让路由系统以与params[:id]等相同的方式使用这些自定义操作的ID填充show?对于这些操作,我尝试了member而不是get的各种方法,但没有按照我希望的方式工作。这个应用程序是使用Ruby on Rails 3.2构建的。

2 个答案:

答案 0 :(得分:2)

这可能会对您有所帮助:

resources :employees do
  member do
    get 'dashboard'
    get 'orientation'
  end
end

以上将生成如下路线,然后您就可以在EmployeesController中使用params [:id]。

dashboard_employee   GET    /employees/:id/dashboard(.:format)          employees#dashboard
orientation_employee GET    /employees/:id/orientation(.:format)        employees#orientation

答案 1 :(得分:0)

我没有测试过这个例子,但你可以明确地设置资源丰富的路径。

这样的事可能有用:

resources :employees, path: '/employees/:id' do
  get 'dashboard', path: '/dashboard'
  get 'orientation', path: '/orientation'
end