在这个问题上阅读你的不同问题我认为你试图建立一个机制为User
评估另一个User
。
基于上述逻辑,不需要使用多态关联。他们可能对你来说过于复杂。
这是我觉得会适合您的需求更好地:
class User < ActiveRecord::Base
has_many :given_evaluations, foreign_key: :evaluator_id, dependent: :destroy, class_name: Evaluation
has_many :received_evaluations, foreign_key: :evaluatee_id, dependent: :destroy, class_name: Evaluation
end
class Evaluation < ActiveRecord::Base
belongs_to :evaluator, foreign_key: :evaluator_id, class_name: User
belongs_to :evaluatee, foreign_key: :evaluatee_id, class_name: User
end
你的评价表会是这样的:
id :integer not null, primary key
evaluator_id :integer not null
evaluatee_id :integer not null
overall_score :integer
continue_project :boolean
created_at :datetime not null
updated_at :datetime not null
然后,您可以废除的Evaluator
和Evaluatable
模块。
给定一个Evaluation
,您可以访问及接收到的评价,像这样的User
:
evaluation = Evaluation.first
evaluator = evaluation.evaluator # returns a User
evaluatee = evaluation.evaluatee # returns a User
,您可以访问一个用户给定的,并与收到的评价如下:
user = User.find(params[:id])
given_evaluations = user.given_evaluations
received_evaluations = user.received_evaluations
或者,如果您确实想分离出Evaluator
和的功能3210你可以创建单独的类,它们都访问相同的users
表。这更多的是单表继承结构。
class User
end
class Evaluator < User
has_many :evaluations
end
class Evaluatee < User
has_many :evaluations
end
class Evaluation < ActiveRecord::Base
belongs_to :evaluator
belongs_to :evaluatee
end
给定一个Evaluation
,您可以访问用户,像这样:
evaluation = Evaluation.first
evaluator = evaluation.evaluator # returns a Evaluator
evaluatee = evaluation.evaluatee # returns a Evaluatee
而且你可以访问用户提供下列给予和接受的评价:
user_id = params[:id]
given_evaluations = Evaluator.find(user_id).evaluations
received_evaluations = Evaluatee.find(user_id).evaluations
# or
given_evaluations = Evaluation.where(evaluator_id: user_id)
received_evaluations = Evaluation.where(evaluatee_id: user_id)
的警告这种方法是,评估记录的依赖性破坏变得更加困难,因为协会分为两个单独的模型。
你在这里提供的是哪个表格/型号? – Maxence
评价表 – Mel