2

我有几个模型设置为公司和员工。一家公司有很多员工,一家公司显然应该能够管理他们的员工。

这里控制器路由的最佳方法是什么?当公司想要添加新员工时,我应该路由到公司控制器还是员工控制器?

例如,我可以路由到companies/:id/edit然后使用具有嵌套属性的表单来添加员工。我也可以只路由到employees/new,或者我什至可以使用嵌套资源并路由到companies/:id/employees/new

你怎么看?

顺便说一句,我正在使用STI,所以Company < UserEmployee < User

4

2 回答 2

0

这是个好问题。以下是我对这三个选项的看法:

  1. 路由到companies/:id/edit是不可接受的。尽管您确实通过添加员工来编辑公司,但这并不意味着此目的。应该使用此路由来编辑公司名称、位置等公司字段。

  2. 路由到员工/新员工是一个不错的选择,但不是我会继续的选择。

  3. 这是我认为的最佳选择。在您的情况下,嵌套资源仅在其父资源的上下文中创建,因此您的应用程序的每个方面都应遵循这一点。这包括创建这些嵌套资源的 url,以及创建方法本身,应该通过@company.employees.create!(params[:employee])而不是通过Employee.create...

于 2012-11-20T12:03:16.757 回答
0

我认为这可能不是最好的,但它很方便,易于理解,并且遵循 Rails 方式。您应该使用嵌套路由:

resources :companies do
  resources :employees
end

现在你将有一些这样的路线:

company_employees    GET    /companies/:company_id/employees(.:format)          employees#index
                     POST   /companies/:company_id/employees(.:format)          employees#create
new_company_employee GET    /companies/:company_id/employees/new(.:format)      employees#new

因此,当您创建新员工时,您知道该员工属于哪个公司,这要归功于:company_id. 所有创建新员工、更新、销毁的代码......当然,将被放入EmployeesController。然后您需要构建一个嵌套表单来创建属于一家公司的新员工。

如果您想创建、编辑、更新……公司?只需为其创建新资源:

resources :company

因此,您可以通过路径编辑公司,如您所写的问题:companies/:id/edit

于 2012-11-20T12:06:15.177 回答