Вопрос

У меня есть приложение 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top