2017-04-03 1 views
0

belongs_to 연관을 정의하는 방법을 알아 내려고합니다. 목표 레코드가 4 개의 다른 열 중 하나에서 발견 될 수 있습니다. 셋업 :레일 belongs_to 여러 외래 키와의 연관

사용자

class User < ActiveRecord::Base 
    has_many :managerships, foreign_key: :employee_id 
    has_many :managers, through: :managerships 
end 

Managership

class Managership < ActiveRecord::Base 
    belongs_to :employee, class_name: 'User' 
    belongs_to :manager # <-- ideas? 
end 

managerships 표 4 열이 manager_id, 우리는 사용자의 관리자를 검색하는 데 사용할 수있는 manager_custom_id, manager_email, manager_saml_id . Managership에 대해이 열 중 하나만 존재합니다. 내가 방법을 찾고 있어요

user.managers를 호출 할 수는 모든 사용자를 반환하도록 (관리자는 User입니다) 여기서 어떤 아이디어에 대한 managerships.manager_id = users.id OR managerships.manager_custom_id = users.custom_id OR managerships.manager_email = users.email OR managerships.manager_saml_id = users.saml_id

많은 감사합니다!

답변

0

비록 하나의 관계에 대한 4 개의 외래 키가 좋은 아이디어라고 생각하지만, User의 관리자를 얻는 한 가지 방법은 범위 대신 메서드를 사용하는 것입니다. 그러나 그렇게하는 경우 #joins을 사용할 수 없습니다.

class User 
    def managers 
    self.class.joins(:managerships).where('managerships.manager_id = ? OR managerships.manager_custom_id = ? OR managerships.manager_email = ? OR managerships.manager_saml_id', id, custom_id, emd, saml_id) 
    end 
end 

Managership에 당신은, 비슷한 일을, 니키타 감사 #manger 대신

+0

belongs_to :manager의 선언 할 수 있습니다. 이 방법이 될 수 있지만 관리자를 반환하지 않습니다. 'self.class.joins (: managerships)'는 관리자가 아닌 모든 사용자를 반환합니다 ('has_many : managerships, foreign_key :: employee_id' 참조). 관리자가 아닌 –

+0

@JanKlimo 맞아. SQL을 통해 생각해 보겠습니다. 쉬운 문제는 아닙니다. / –