ruby-on-rails FactoryBot:为什么关联不起作用(不能为空)?

yr9zkbsy  于 2023-04-08  发布在  Ruby
关注(0)|答案(1)|浏览(138)

我的Rails项目有三个FactoryBot工厂。如果我用FactoryBot.lint测试工厂的有效性,图书工厂是无效的-根据这个错误。我做错了什么吗?

Book format can't be blank

book.rb factory:

FactoryBot.define do
  factory :book do
    title { 'The Hobbit' }
    book_format
    owner
  end
end

book_format.rb工厂:

FactoryBot.define do
  factory :book_format do
    name { 'default' }
  end
end

所有者.rb工厂:

FactoryBot.define do
  factory :owner do
    email { 'john@doe.com' }
    password { 'password'}
  end
end

编辑:意识到我忘记从模型中添加代码-在这里:
书籍模型相关代码:

belongs_to :book_format, counter_cache: true
  belongs_to :owner, counter_cache: true

book_format模型中的相关代码:

has_many :books

来自所有者模型的相关代码:

has_many :books, dependent: :destroy

我不明白为什么我在book_format上得到这个错误消息-而不是在owner上(这也很奇怪,但至少是一致的?)。
第2集:This Works:

FactoryBot.define do
  factory :book do
    title { 'The Hobbit' }
    owner
    book_format { BookFormat.create( name: 'default' ) }
  end
end
u3r8eeie

u3r8eeie1#

您可以使用工厂机器人创建BookFormat,之后您将不需要进入book factory并添加可能出现在BookFormat模型中的新字段:

FactoryBot.define do
  factory :book do
    title { 'The Hobbit' }
    owner
    book_format { FactoryBot.create(:book_format) }
  end
end

相关问题