2

Company と Employee としていくつかのモデルを設定しています。会社には多くの従業員がおり、会社は明らかに従業員を管理できる必要があります。

ここでコントローラーをルーティングするための最良のアプローチは何ですか? 会社が新しい従業員を追加したい場合、会社のコントローラーまたは従業員のコントローラーにルーティングする必要がありますか?

たとえばcompanies/:id/edit、ネストされた属性を持つフォームにルーティングしてから、それを使用して従業員を追加できます。にルーティングすることemployees/newもできますし、ネストされたリソースを使用して にルーティングすることもできcompanies/:id/employees/newます。

どう思いますか?

ちなみに私が使っているSTIのでCompany < UserEmployee < User

4

2 に答える 2

0

最高ではないかもしれませんが、便利でわかりやすく、レールの道をたどります。ネストされたルートを使用する必要があります。

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ます。次に、1つの会社に属する新しい従業員を作成するためのネストされたフォームを作成する必要があります。

会社を作成、編集、更新したい場合は?そのための新しいリソースを作成するだけです。

resources :company

したがって、作成した質問のように、パスを介して会社を編集できますcompanies/:id/edit

于 2012-11-20T12:06:15.177 に答える
0

That's a good question. Here is what I think of the three options:

  1. Routing to companies/:id/edit is unacceptable. Although you do edit a company by adding employees it is not meant for this purpose. This route should be used in order to edit company fields like company name, location etc.

  2. Routing to employees/new is a good option, but not the one I would go on.

  3. This is the best option in my opinion. In your case nested resources are created only in the context of their parent resource, so every aspect of you application should follow this. This includes the url for creating these nested resources, and the creation method itself which should be done through @company.employees.create!(params[:employee]) and not by Employee.create...

于 2012-11-20T12:03:16.757 に答える