我使用以下模型具有多态关联discussions
:
class CreateDiscussions < ActiveRecord::Migration[5.2]
def change
create_table :discussions do |t|
t.references :organization, foreign_key: true
t.references :discussable, polymorphic: true
t.references :content, foreign_key: true
t.timestamps
end
end
end
,模型定义为
class Discussion < ApplicationRecord
belongs_to :organization
belongs_to :discussable, polymorphic: true
has_one :content
end
将创建列discussable_id
和discussable_type
,正如我所期望的那样。
关联的另一端定义为
module Concerns
module Discussable
extend ActiveSupport::Concern
included do
has_many :discussions, as: :discussable, dependent: :destroy
end
end
end
当我尝试在我的可讨论对象上进行讨论时,出现以下错误。
it 'can be added to a feature' do
expect(feat.discussions).to be_empty
Discussion.create(discussable: feat, content: content)
哪个错误:
Failure/Error: Discussion.create(discussable: feat, content: content)
ActiveModel::MissingAttributeError:
can't write unknown attribute `discussion_id`
发布版本5.2.3
答案 0 :(得分:0)
Ugggg ....我全都陷入了多态关联中,我没有注意到我的content
模型没有用于讨论的外键。
PEBKAC错误。
换句话说,我完全忽略了以下事实
class Discussion < ApplicationRecord
belongs_to :organization
belongs_to :discussable, polymorphic: true
has_one :content
end
要求content
有discussion_id
列。