한 테이블에 두 개의 열을 사용하여 관계를 정의 할 수 있기를 원합니다. 따라서 작업 앱을 예로 사용합니다.
시도 1 :
class User < ActiveRecord::Base
has_many :tasks
end
class Task < ActiveRecord::Base
belongs_to :owner, class_name: "User", foreign_key: "owner_id"
belongs_to :assignee, class_name: "User", foreign_key: "assignee_id"
end
그럼 Task.create(owner_id:1, assignee_id: 2)
이 날 수행 할 수 있습니다 Task.first.owner
반환하는 사용자를 하고 Task.first.assignee
반환하는 사용자이 있지만 User.first.task
반환 아무것도. 이는 작업이 사용자에게 속하지 않고 소유자 및 담당자 에게 속하기 때문 입니다. 그래서,
시도 2 :
class User < ActiveRecord::Base
has_many :tasks, foreign_key: [:owner_id, :assignee_id]
end
class Task < ActiveRecord::Base
belongs_to :user
end
두 개의 외래 키가 지원되지 않는 것처럼 보이므로 모두 실패합니다.
그래서 내가 원하는 것은 User.tasks
사용자가 소유하고 할당 된 작업을 모두 말하고 얻을 수있는 것입니다.
기본적으로 어떻게 든 쿼리와 동일한 관계를 구축합니다. Task.where(owner_id || assignee_id == 1)
가능합니까?
최신 정보
나는 사용하지 않으려 고 finder_sql
하지만이 문제의 받아 들일 수없는 대답은 내가 원하는 것에 가깝습니다 : Rails-Multiple Index Key Association
따라서이 방법은 다음과 같습니다.
시도 3 :
class Task < ActiveRecord::Base
def self.by_person(person)
where("assignee_id => :person_id OR owner_id => :person_id", :person_id => person.id
end
end
class Person < ActiveRecord::Base
def tasks
Task.by_person(self)
end
end
에서 작동하도록 할 수는 있지만 Rails 4
다음 오류가 계속 발생합니다.
ActiveRecord::PreparedStatementInvalid: missing value for :owner_id in :donor_id => :person_id OR assignee_id => :person_id