Переход от 2 ко многим в Rails
-
06-09-2019 - |
Вопрос
У меня есть приложение Rails, над которым я работаю.У меня есть отдельная модель, которую нужно связать только с двумя из одной модели.В частности, в моей «оценке» есть два «участника»: оценщик и оцениваемый.У них также есть еще несколько фрагментов информации, но они не должны иметь к этому отношения.
Как лучше всего это представить?Будет ли лучше всего использовать два внешних ключа в оценке или отношения «многие-многие» между оценками и элементами?Будет ли какой-нибудь другой вариант, который будет работать еще лучше?
Сначала я бы подумал, что многие ко многим, но, поскольку на одной стороне отношений есть определенное число, я сомневаюсь в применимости здесь.Насколько мне известно, отношение «многие ко многим» обычно подразумевает, что число на каждой стороне отношения является переменным.
Решение
Вероятно, вам нужны две разные ассоциации, возможно, с одним и тем же классом:
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
Другие советы
Я сам это не проверял, и это может показаться немного авантюрным, но я думаю, что это может сработать:
Модель оценки
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
Модель участника
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