Wenn man von 2 bis viele in Rails
-
06-09-2019 - |
Frage
Ich habe eine Rails-Anwendung, die ich in dem Prozess des Entwerfens bin. Ich habe ein separates Modell, das nur 2 von einem Modell verknüpfen muss. Insbesondere habe meine "Bewertung" s 2 "Mitglied" s, Evaluator und ein evaluatee. Sie haben auch ein paar andere Stücke von Informationen, auch, aber sie sollten nicht auf diese relevant sein.
Was ist der beste Weg, dies zu vertreten? Würden zwei Fremdschlüssel in der Auswertung am besten sein, oder ein viele-viele-Beziehung zwischen den Bewertungen und den Mitgliedern? Gäbe es eine andere Option, die noch besser funktionieren würde?
Ich würde denken, zunächst viele zu viele, aber da gibt es eine definierte Anzahl auf einer Seite der Beziehung ist die Frage ich die Anwendbarkeit hier. Mein Wissen impliziert many-to-many allgemein, dass die Zahl auf jeder Seite der Beziehung variabel ist.
Lösung
Sie wollen wahrscheinlich zwei verschiedene Verbände, die möglicherweise mit der gleichen Klasse:
class Member < ActiveRecord::Base
has_many :evaluations_out, :class_name => 'evaluation', :as => :evaluator
has_many :evaluations_in, :class_name => 'evaluation', :as => :evaluatee
end
class Evaluation < ActiveRecord::Base
belongs_to :evaluator, :class_name => 'member'
belongs_to :evaluatee, :class_name => 'member'
end
Andere Tipps
Ich habe es selbst nicht getestet, und es könnte ein wenig abenteuerlich klingen, aber ich denke, dass funktionieren könnte:
Evaluation Modell
class Evaluation < ActiveRecord::Base
belongs_to :evaluator, :class_name => "Member", :foreign_key => "evaluator_id"
belongs_to :evaluatee, :class_name => "Member", :foreign_key => "evaluatee_id"
end
Mitglied Modell
class Member < ActiveRecord::Base
has_many :evaluators, :class_name => "Evaluation", :foreign_key => "evaluator_id"
has_many :evaluatees, :class_name => "Evaluation", :foreign_key => "evaluatee_id"
end