2012-11-06 6 views
2

사용자, 학교 및 지원자의 3 가지 모델이 있습니다.중첩 된 has_many 관계의 항목에 액세스

사용자 has_many :schools, 학교 has_many :applicantsbelongs_to :user 및 신청자 belongs_to :school.

특정 사용자에게 속한 학교에 속한 지원자를 나열하고 싶습니다. 나는 그것을이 오류를주고있다대로 작동하지 않는

current_user.schools.applicants.paginate(page: params[:page]) 

와 함께 할 수 있어야한다고 생각 :

undefined method `applicants' for #<ActiveRecord::Relation:0x007fb9da274110> 
나는이 지원자가 액세스 할 수있는 방법

?

답변

2

당신이 할 수없는 그런 has_many 협회 체인.

# app/models/user.rb 
has_many :applicants, :through => :schools 

그런 다음 당신이 guide on ActiveRecord associations에서

current_user.applicants.paginate(page: params[:page]) 

를 호출 할 수 있습니다 : 상기 사용자 모델에 has_many :through 연결 만들기 도와

The has_many :through association is also useful for setting up “shortcuts” through nested has_many associations. [...]

+0

사용자에게'have_many : applications, class_name : "신청자", : : 학교 "라는 사용자에게 'current_user.applications' 연관성을 부여하는 것이 더 합리적 일 것입니다. 사용자에게는 지원자가 없습니다. 그렇지 않으면 동의합니다. 이것이 최고의 해결책입니다. – meagar

+0

물론이 질문의 목적을 위해 간단하게 설명하고 싶습니다. – Thilo

+0

위대한, 너무 작동합니다.이 솔루션은 컨트롤러에서 select 문을 사용하는 것보다 좀 더 우아하다고 생각합니다. – jmabry

0

이 작업을 수행 할 수 없습니다. 연결은 이전 연결이 단일 레코드 (즉, belongs_to.belongs_to.has_many을 연결할 수 있지만 has_many.has_many은 아닐 수 있습니다 - 즉 has_many :through)에 연결되는 한 연결될 수 있습니다.

당신이 지원자를 원한다면

, 당신은 실제로 지원자를 선택해야합니다

Applicant.where(school_id: current_user.schools.pluck(:id)).paginate(page: params[:page]) 
+0

감사합니다 ... 의미가 및 고정 발행물. – jmabry

+0

찾고있는 것이 사용자 별 모든 응용 프로그램 * 인 경우 'has_many : through'를 추가하는 것이 좋습니다. 그러나 사용자가 현재 참여하고있는 모든 학교의 모든 지원자를 찾고있는 것처럼 들리므로 사용자의 현재 응용 프로그램이 아닌 모든 사용자의 응용 프로그램을 찾을 수 있습니다. 즉 사용자 모델에 대해 'has_many : through'가되어서는 안됩니다. – meagar

관련 문제