在 Rails 中建立关联时出现 UnknownAttributeError

UnknownAttributeError when making an association in Rails

编辑!: 由@mellowfish 解决 原来测试数据库还没有迁移,我只是在迁移我的开发数据库!我 运行 此代码用于设置我的测试数据库。

bundle exec rails db:test:prepare

我正在设置一个 food/drink 应用程序。我有鸡尾酒配料,并且我在两者之间有has_and_belongs_to_many关系.当我尝试添加 "cocktail.ingredients << ingredients" 时,出现 UnknownAttributeError。

我检查了 rails 的所有命名约定。当它与鸡尾酒模型有 has_many 关系时,我可以在鸡尾酒中添加成分,但这对我没有好处;我需要 has_and_belongs_to_many 与鸡尾酒和配料的关系。

RSpec.describe Cocktail, type: :model do
  subject do
    build(:cocktail)
  end

describe 'when adding ingredients' do
    context 'with valid attributes' do
      it 'saves successfully' do
        ingredient = create(:ingredient)
        subject.ingredients << ingredient
        expect(subject.ingredients.length).to eq(1)
      end
    end

在 byebug 测试期间,在我的控制台中,我可以看到空的 associations::collectionproxy [] 用于 cocktail。 然而,当我试图铲入一种成分时,它给了我

"ActiveModel::UnknownAttributeError Exception: unknown attribute >'cocktail_id' for Cocktail::HABTM_Ingredients."

成分也是同样的错误:

Failure/Error: subject.cocktails << cocktail
ActiveModel::UnknownAttributeError: unknown attribute 'ingredient_id' for Ingredient::HABTM_Cocktails.

这是cocktail.ingredientsreturn铲之前的样子: "ActiveRecord::Associations::CollectionProxy []"

这是ingredient.cocktails: "Cocktail::ActiveRecord_Associations_CollectionProxy:0x000055e464d62628"

确保映射 table 已在您的测试数据库中创建。

根据输出,rails 试图猜测模式而不是使用它在数据库中找到的内容,这意味着它没有找到 table 您的迁移应该定义的内容.