Неправильный ключ при попытке создать элемент при полиморфной ассоциации - PullRequest
0 голосов
/ 05 июля 2019

У меня есть полиморфная ассоциация 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`

Rails версия 5.2.3

1 Ответ

0 голосов
/ 05 июля 2019

Угггг .... Я был полностью вовлечен в полиморфную ассоциацию. Я не заметил, что у моей модели content не было внешнего ключа для обсуждения.

Ошибка PEBKAC.

Другими словами, я выглядел полностью мимо того факта, что

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

требует, чтобы content имел столбец discussion_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...