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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top