在這個問題上閱讀你的不同問題我認爲你試圖建立一個機制爲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