我通过多态关联建立了多对多关系,但在编写查询时遇到了问题
下面是我的迁移:
def change
create_table :excuses do |t|
t.string :label
t.integer :status, default: 0, null: false
t.timestamps
end
create_table :excuses_excusables do |t|
t.references :excusable, polymorphic: true, index: true, null: false
t.integer :excuse_id, index: true, null: false
end
end
这个想法是我可以将一个Excuse
关联到我现有的一个表re_evalutations
,这样我就可以从re_evaluation
调用re_evaluation.excuse
。借口是一组预定义的借口,用户可以从中选择,这就是为什么我走了多对多的路线。
我不明白的部分是如何调用excuse.re_evaluations
,以便能够使用给定的excuse
获取所有re_evaluations
。
class ReEvaluation < ApplicationRecord
has_one :excuses_excusable, as: :excusable
has_one :excuse, through: :excuses_excusable
end
class Excuse < ApplicationRecord
has_many :excuses_excusables, foreign_key: :excuse_id
# Does not work
# has_many :re_evaluations, through: :excuses_excusables, source_type: "ReEvaluation"
end
class ExcusesExcusable < ApplicationRecord
belongs_to :excusable, polymorphic: true
belongs_to :excuse
end
如何修改这些关联以允许调用excuse.re_evaluations
?
1条答案
按热度按时间wf82jlnq1#
已正确使用
source_type
属性为多态关联指定正确的类型筛选器。但是,无法从关联名称(re_evaluations
)推断源关联(excusable
),您需要显式指定它(source: :excusable
)。因此,如果你这样修改你的代码,它应该工作: