2012-11-13 2 views
0

은이 질문은 내가 3 개 모델을 만회 이미 요청을받은해야하지만, 난 그냥 가정 대답 :(레일 '중첩'관련 검색

을 찾을 수 없습니다 City.first.companies에 의해 주어진시 회사는,하지만 내가하고 싶은 것은 무엇을 달성 할 수 있었다 것은 Country 모델의 방법을 작성하는 것입니다 Country.first.companies

처럼, 특정 국가에 대한 모든 회사를 가져올 수있을 것입니다 :

def companies 
    @companies = [] 
    cities.all.each{ |c| @companies << c.companies unless c.companies.empty? } 
    @companies 
end 

하지만 회사 개체 배열의 배열을 반환합니다. 또한

class Country 
    has_many :cities 
    has_many :companies 
end 

class Company 
    belongs_to :city 
    belongs_to :country 
end 

처럼 FK 국가 모델로 country_id 열을 추가 할 수 있지만 매우 DRY 보이지 않는다.

특정 국가의 회사 개체 배열을 받고 싶습니다. 나는 이것을 달성하기위한 레일스 방법이 있다고 확신한다. 무엇이 될까?

감사합니다.

답변

1

has_many through 연관을 사용하십시오.

class Country 
    has_many :companies, :through => :cities 

이제 Country.last.companies을 사용할 수 있습니다.

+0

오, 이런 ... 너무 뻔한데, 나는 ': through' 협회가 이런 식으로 작동한다는 것을 몰랐다. – paulus

관련 문제