0
여러 역할을 나타내는 조건문이있는 두 테이블 사이에 많은 관계가 여러 개 있습니다. 레일에서 관계를 지정하십시오.
class Course < ActiveRecord::Base
...
has_many :course_mentors, :conditions => { :type_str => "mentor" }, :class_name => CourseUser
has_many :mentors, :through => :course_mentors, :source => :user
has_many :course_enrollees, :conditions => { :type_str => "enrollee" }, :class_name => CourseUser
has_many :enrollees, :through => :course_enrollees, :source => :user
...
end
는 course.mentors 등 그러나 때로는 @ 함께 모두 가입자와 멘토를 얻을 수 있도록 편리 할 것, 단순히 course.enrollees @ 할 수있는 자체에 협회 중 하나의 내용을 검색하려면 .
필자는 단일 연관의 각 조합에 대한 추가 연결을 만드는 것이 비실용적 인 많은 서로 다른 연결을 가지고 있습니다. 항상 할 수있는 한
(@course.enrollees + @course.mentors).sort
그러나 이것은 데이터베이스에 두 가지 요청을하고 결과적으로 중복 항목이 될 수 있습니다.
연관성에 대한 merge
함수도 조사했지만 빈 관계 만 반환합니다.
이렇게하는 것이 가장 좋은 방법은 무엇입니까?
has_many :course_users
을 그리고 CourseUser 모델 내부의 범위를 넣어 :
이것은 우리가 찾고 있었던 것과 정확히 일치합니다. 어떻게이 두포 밑에서 작동합니까? 하나의 DB 요청이 만들어 졌는가 아니면 n 개의 다른 관계에 대해 n인가? –
오류가 발생했습니다 : #에 대한 정의되지 않은 메서드 'of_type' 아이디어가 있습니까? –
좋아요, 다소 정렬했습니다. 나는 관계라고 불리는 관계를 통해 다른 것을 사용하고있었습니다 : course_users와 조인 테이블. 이제 코드에서 릴레이션 (사용자)의 다른쪽에있는 모델이 아니라 조인 모델의 객체를 반환합니다. 어떻게해야합니까? –