7

나는 손바닥에서 이마에 이르기까지 위험을 감수하고 있지만 레일즈의 액티브 레코드 설탕을 사용하는 방법을 알 수 없다. 한 테이블의 두 열을 ActiveRecord가있는 다른 열의 같은 열을 가리 키도록 할 수 있습니까?

I는 두 개의 열 각각합니다 ( users 테이블 구체적 id 열)을 users 테이블에서 다른 사용자를 참조한다 ( submitter_idassignee_id)를 갖는 tickets 표를 갖는다. ActiveRecord의 연결을 사용하여 ticket.submitter.nameticket.assignee.email과 같은 작업을 수행하고 싶습니다. 제출자와 양수인은 단순히 서로 다른 연관 이름으로 된 사용자 객체입니다.

내가하고있는 일에 가깝다는 것을 알게 된 유일한 것은 다형성 연관을 사용하는 것이지만, 결국에는 내가 필요로하는 것이 아님을 확실히 확신하고 있습니다. 나는 여러 유형을 가지지 않을 것입니다. 제출자와 양수인 모두 사용자가 될 것이고, 매우 다른 두 명의 사용자가 될 수 있습니다.

도움이 될 것입니다. 감사!

답변

14
class Ticket < ActiveRecord::Base 
    belongs_to :submitter, :class_name => "User" 
    belongs_to :assignee, :class_name => "User" 
end 

말아야 d 일.

편집 : 시도하지 않고도 : foreign_key 매개 변수가 필요한지 확실하지 않습니다. 내 본능은 아니지만 상처받을 수는 없다.

다시 편집 : 죄송합니다. 사용자 -> 티켓 연결을 해제하십시오. 당신은 그 (것)들을 사용하는 언급하지 않았다, 나는 일반적으로 한 방향에서만 협회를 추가 할 것이다.

어쨌든, 시도 :이 협회의 이름에서 파생 될 수있는 경우

class User < ActiveRecord::Base 
    has_many :assigned_tickets, :class_name => "Ticket", :foreign_key => "assignee_id" 
    has_many :submitted_tickets, :class_name => "Ticket", :foreign_key => "submitter_id" 
end 
+0

분명히 손바닥에서 이마에 이르기까지. 나는 그것이 거기에 있다는 것을 알았지 만 추측 한 그 기억에 접근 할 수 없었다. 나를 도와 주셔서 고마워요! – localshred

+0

이 답변 덕분에 많은 시간을 절약 할 수있었습니다. 감사합니다. – potashin

5

이런 식으로 뭔가가

class Ticket < ActiveRecord::Base 
    belongs_to :submitter, :class_name => 'User', :foreign_key => 'submitter_id' 
    belongs_to :assignee, :class_name => 'User', :foreign_key => 'assignee_id' 
end 

class User < ActiveRecord::Base 
    has_many :tickets, :class_name => 'Ticket', :foreign_key => 'submitter_id' 
    has_many :tickets_assigned, :class_name => 'Ticket', :foreign_key => 'assignee_id' 
end 

예, PreciousBodilyFluids이 레일은 열 이름, 즉 submitter_id에서 추론 수있는 우리가 티켓 클래스의 foreign_key를 지정할 필요가 없습니다 옳은 일을하고

을 assignee_id한다

하지만 당신의 연결 이름이 column_name_ {ID} 다른 경우 당신은 사용자 클래스의 경우, 즉를 지정해야합니다

+0

외부 키가 belongs_to 선언 할 필요가 없습니다. – EmFi

+0

당신이 옳다. 그래서 나는 내 대답에서도 그것을 언급했다. :) – nas