2012-11-20 5 views
2

회사 및 직원으로 설정된 몇 가지 모델이 있습니다. 한 회사에는 많은 직원이 있으며 한 회사는 분명히 직원을 관리 할 수 ​​있어야합니다.레일 연관 및 생성

여기서 컨트롤러 라우팅에 가장 적합한 방법은 무엇입니까? 회사가 새로운 직원을 추가하려면 회사 컨트롤러 또는 직원 컨트롤러로 라우팅해야합니까?

예 : companies/:id/edit으로 연결 한 다음 중첩 된 특성이있는 양식을 사용하여 직원을 추가 할 수 있습니다. 또한 employees/new으로 라우팅 할 수도 있고, 중첩 된 리소스를 사용하여 companies/:id/employees/new에 연결할 수도 있습니다.

당신은 어떻게 생각하십니까? 내가 STI, 그래서 Company < User 좋은 질문이다

답변

0

Employee < User을 사용하고 있습니다 그런데

.

  1. 라우팅에 companies/:id/edit가 받아 들일 : 여기 세 가지 옵션을 생각하는 것이다. 직원을 추가하여 회사를 편집하더라도이 목적을위한 것이 아닙니다. 회사 이름, 위치 등의 회사 필드를 수정하려면이 경로를 사용해야합니다.

  2. 직원에게 전달/새로 보내기는 좋은 옵션이지만 계속 진행하지 않아야합니다.

  3. 내 의견으로는 이것이 최선의 선택입니다. 귀하의 경우 중첩 된 리소스는 부모 리소스의 컨텍스트에서만 만들어 지므로 응용 프로그램의 모든 측면이이를 따라야합니다. 이것은 이러한 중첩 된 자원을 작성하기위한 URL을 포함하고 Employee.create...

0

에 의해 @company.employees.create!(params[:employee])하지 통해 수행해야 생성 방법 자체는 나는 그것이 최선이 아니다 어쩌면 생각하지만, 쉽게 이해하고, 편리하고를 따라 레일 방식. 당신은 중첩 된 경로를 사용해야합니다

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에 저장됩니다. 그런 다음 한 회사에 속한 새 직원을 만들 수있는 중첩 된 양식을 만들어야합니다.

작성, 수정, 업데이트 ... 회사를 원하십니까? 그냥 새로운 리소스를 생성 : companies/:id/edit :

resources :company

그래서, 당신은 경로를 통해, writen 질문에서와 같이 회사를 편집 할 수 있습니다.

+0

감사합니다. 당신이 동의하는 것 같아요. 그러나 나는 양식을 멋지게 작동시키는 것처럼 보일 수 없다. 이후 STI 사용하고 'form_for'EmployeesController 대신 UsersController 게시 할 코드를 생성 할 것으로 보인다. 작동하도록 할 수는 있지만 양식이 사용자 수퍼 클래스 대신 자원을 Employee로 인식해서는 안됩니까? – Kasper

+0

예, 죄송합니다. 그냥 내 코드를 살펴 봤어. 어떤 시점에서 양식을 파산 한 내 사용자 모델에 메소드를 추가했습니다. 모두 잘 작동합니다. 도와 주셔서 감사합니다. – Kasper

+0

오케이, 환영합니다;) – Thanh