在 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 您的迁移应该定义的内容.
编辑!: 由@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 您的迁移应该定义的内容.