:has_many i routes

Witam.

Mam pracowników należących do działu. Czyli:

[code=“ruby”]class Department < ActiveRecord::Base
has_many :employees
end

class Employee < ActiveRecord::Base
belongs_to :department
end[/code]
w routes.rb mam :

map.resources :employees map.resources :departments, :has_many => 'employees'
rake routes pokazuje że :

employees GET /employees {:controller=>"employees", :action=>"index"} department_employees GET /departments/:department_id/employees {:controller=>"employees", action=>"index"}
Dlaczego mimo, że podaje dwa różne adresy
localhost/employees i
localhost/departments/2/employees zawsze wykonuje sie index z kontrolera employees?

Chcę uzyskać efekt, że wchodząc przez localhost/employees mam listę wszytskich pracowników a przez localhost/departments/2/employees mam wszystkich pracowników ale z działu 2.

Czy musze pisac warunek w index dla kontorlera employees, ze jak nie posute :department_id to dodaj warunek do wyszukiwania? Czy robi się to inaczej?

Ten sam efekt jest w przypadku edit. Tez wykonuje sie ta sama akcja z kontorlera employees bez wzgledu czy jest:
localhost/employees/1/edit
localhost/departments/2/employees/1/edit

Czy tak ma być czy błąd mam w pliku routes?
Jak sobie poradzić z tym problemem?

Pozdrawiam

Możesz albo:

  1. Sprawdzać department_id tak jak napisałeś powyżej albo
  2. Utworzyć kontroler employees_by_department:

/employees_by_department/:department_id/index
/employees_by_department/:department_id/edit/:id

etc.

Jeśli employees by department będzie się różnił znacząco od employees (w sensie szablonów, logiki etc) to wybrałbym sposób 2. Jeśli nie to 1 powinien być prostszy.

[quote=hosiawak]Możesz albo:

  1. Utworzyć kontroler employees_by_department:

/employees_by_department/:department_id/index
/employees_by_department/:department_id/edit/:id[/quote]
Czy tak powinien wyglądać wpis w tym przypadku?

map.connect ‘employees_by_department/:department_id/:action/:id’, :controller => ‘employees’, :action => ‘employees_by_department’

Pozdrawiam

Moim zdaniem najprosciej i najlatwiej byloby dodac po prostu sciezke:

map.connect 'employees', :controller => 'employees', :action => 'show_all'

Oczywiscie przed zdefiniowaniem sciezek REST dla ‘employees’.