1

저는 두 모델이 있습니다 : companylocation입니다. company에는 많은 locations이 있습니다.
나는 매우 흥미로운 Ryan Bates' Named Routes을 발견했다.
그래서 각 모델에 대한 리소스를 routes.rb에 추가했습니다.명명 된 경로를 사용하여 Rails에서 목록 동작을 필터링하는 방법은 무엇입니까?

resources :companies 
resources :locations 

이것은 http://localhost:3000/companies 결과 <%= link_to "Companies", companies_path %> 같은 이름 경로에 따라 링크를 생성 할 날 수 있습니다.

이제는 속한 company을 기준으로 locations의 목록을 필터링하고 싶습니다. 명명 된 경로로 작업하기 전에 다음과 같은 링크를 추가하여이 작업을 완료했습니다.

<%= link_to "Locations for this company", { :controller => 'locations', :action => 'list', :company_id => company.id } %> 

여기서 I는 list 액션 위치를 필터링하는 LocationsController company_id로 전달한다.

def list 
    @locations = Location.order("locations.id ASC").where(:company_id => @company.try(:id)) 
end 

답변

2

하나의 옵션 :

resources :companies do 
    get :list, :controller => :locations 
    end 

것 이 경로를 생성하십시오 :

company_list GET /companies/:company_id/list(.:format) {:action=>"list", :controller=>"locations"} 

그러면 company_list 도우미 메서드가 제공됩니다. 그러나

이, 윌

resources :companies do 
    get :list, :controller => :locations 
    resources :locations 
    end 

company_locations 도우미를 제공하는 점, 대신 LocationsController에 index 행동 대신 list합니다.

company_locations GET /companies/:company_id/locations(.:format)   {:action=>"index", :controller=>"locations"} 

후자

더 편안하고,하지만 당신이 더 도움이되는 이름을 결정 얻을 수 있도록, 개발자입니다.

Locations 컨트롤러의 대부분의 액션/도우미가 : company_id 또는 인스턴스화 된 회사 모델이 첨부되어 있어야한다는 단점이 있습니다.

편집

3 옵션 :

resources :companies do 
    get :list, :controller => :locations 
end 
resources :locations 

이것은 'company_list'경로 이외 때문에, 당신은 회사에 의해 필터링 된 위치에 대한 많은 필요가 주장하지 않는, 가장 좋은 것 같다.

+0

작동! 하지만, 필자는'locations_path'를 가리키는 또 다른 필터링되지 않은 링크를 가지고 있습니다. '위치'가 표시되지 않습니다. 이것은 내가 컨트롤러에서 정의한 것에 기인합니다. 위치 컨트롤러의'list' 액션을 사용하여 필터링 된 결과와 필터링되지 않은 결과를 모두 어떻게 보장 할 수 있습니까? – JJD

+0

세 번째 제안을 추가했습니다. – nessur

+1

고맙습니다. 회사와 관련된 새로운 위치를 만들고 싶기 때문에 첫 번째 선택을 유지합니다. 나는 new_company_location_path를 사용하여 연결을 유지한다. – JJD

1

위치 모델에서 수행해야하는 작업에 따라 중첩 된 리소스를 사용하는 것이 좋습니다.

resources :companies do 
    resources :locations 
end 

그럼 어떻게 당신에게 새로운 모든 종류의를 제공하는 레이크 노선, 같은 더 좋은 경로 :

기업/ID/위치

+0

고마워, 나는이 옵션을 선택했다. – JJD