尝试在多态关联上创建项目时键不正确

时间:2019-07-05 17:44:02

标签: ruby-on-rails ruby-on-rails-5

我使用以下模型具有多态关联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_iddiscussable_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

1 个答案:

答案 0 :(得分:0)

Ugggg ....我全都陷入了多态关联中,我没有注意到我的content模型没有用于讨论的外键。

PEBKAC错误。

换句话说,我完全忽略了以下事实

class Discussion < ApplicationRecord
  belongs_to :organization
  belongs_to :discussable, polymorphic: true
  has_one :content
end

要求contentdiscussion_id列。