关联对象没有主键

时间:2017-04-24 14:04:13

标签: ruby factory-bot sequel

在使用Sequel时,我仍无法找到修复关联工厂问题的解决方案。

我有两个模型依赖于one_to_many,它与Active Record中的has_many相同,而many_to_one则与Active Record中的belongs_to相同。

以下是已定义的工厂:

FactoryGirl.define do
  to_create { |instance| instance.save }
  factory :post do
    title  "some title"
  end
end

FactoryGirl.define do
  to_create { |instance| instance.save }
  factory :comment do
    content    "some content"
    association :post, strategy: :build
  end
end

运行build(:comment)时,它失败并显示:

Associated object does not have a primary key. 

有没有人知道如何解决这个问题?我总是可以先建立/创建一个帖子,然后将其签名为评论,但这很乏味。更重要的是,我将不得不删除association :post, strategy: :build并使用一些整数随机值。

我正在使用:

  • factory_girl_rails 4.8.0
  • ruby 2.4.0
  • sequel-rails 0.9.15
  • sequel 4.45.0

2 个答案:

答案 0 :(得分:3)

Sequel不支持向未保存的对象添加关联对象,除非您使用nested_attributes插件同时创建两者。因此,除非FactoryGirl有特定的代码来处理,否则它可能无法正常工作。

答案 1 :(得分:0)

看起来您的策略应该是创建而不是构建。这是我使用FactoryBot解决的方法:

after(:build) { |comment| comment.post ||= create(:post) }

如果您指定不带任何参数的关联并使用以下配置,则默认情况下会发生这种情况:

FactoryBot.use_parent_strategy = false