Indo de 2 a muitos em Rails
-
06-09-2019 - |
Pergunta
Tenho uma aplicação Rails que eu estou no processo de concepção. Eu tenho um modelo separado que as necessidades de vincular a apenas 2 de um modelo. Especificamente, os meus "avaliação" s têm 2 s "membro", um avaliador e um evaluatee. Eles também têm algumas outras peças de informação, também, mas eles não devem ser relevantes para isso.
Qual é a melhor maneira de representar isso? Seria 2 chaves estrangeiras na avaliação ser o melhor, ou um relacionamento muitos-muitos entre as avaliações e os membros? Haveria alguma outra opção que iria trabalhar ainda melhor?
Eu pensaria inicialmente muitos para muitos, mas uma vez que há um número definido de um lado da relação Eu questiono a aplicabilidade aqui. Para meu conhecimento, muitos-para-muitos, geralmente implica que o número de cada lado da relação é variável.
Solução
Você provavelmente quer duas associações diferentes, possivelmente com a mesma classe:
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
Outras dicas
Eu não testei por mim mesmo e isso pode parecer um pouco aventureiro, mas acho que poderia funcionar:
Modelo de Avaliação
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
Modelo Membro
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