Ich möchte in der Lage sein, zwei Spalten in einer Tabelle zu verwenden, um eine Beziehung zu definieren. Verwenden Sie also eine Aufgaben-App als Beispiel.
Versuch 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
Also dann Task.create(owner_id:1, assignee_id: 2)
Auf diese Weise kann ich ausführen, Task.first.owner
welcher Benutzer eins und Task.first.assignee
welcher Benutzer zweiUser.first.task
zurückgibt, aber nichts zurückgibt. Dies liegt daran, dass die Aufgabe keinem Benutzer gehört, sondern dem Eigentümer und dem Beauftragten . Damit,
Versuch 2:
class User < ActiveRecord::Base
has_many :tasks, foreign_key: [:owner_id, :assignee_id]
end
class Task < ActiveRecord::Base
belongs_to :user
end
Das schlägt einfach ganz fehl, da zwei Fremdschlüssel nicht unterstützt zu werden scheinen.
Ich möchte also in der Lage sein User.tasks
, sowohl die eigenen als auch die zugewiesenen Aufgaben der Benutzer zu sagen und zu erhalten.
Im Grunde irgendwie eine Beziehung aufbauen, die einer Abfrage von gleich wäre Task.where(owner_id || assignee_id == 1)
Ist das möglich?
Aktualisieren
Ich finder_sql
möchte nicht verwenden , aber die nicht akzeptierte Antwort dieses Problems scheint nahe an dem zu liegen, was ich möchte: Rails - Multiple Index Key Association
Diese Methode würde also so aussehen:
Versuch 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
Obwohl ich es zum Laufen bringen kann, erhalte Rails 4
ich immer wieder den folgenden Fehler:
ActiveRecord::PreparedStatementInvalid: missing value for :owner_id in :donor_id => :person_id OR assignee_id => :person_id