Rails创建或更新关联记录

时间:2019-03-22 10:10:27

标签: ruby-on-rails activerecord ruby-on-rails-5 rails-activerecord

我有这个示例代码,它引发了“重复期望”。相反,我只想跳过是否存在重复项。

(1..10).each do |page|
      group.products << [{id: 1, title: "Example A"}, {id: 2, title: "Example B"}]
      group.save
end

仅在此示例中,产品数组是静态的,重要的是它具有ID,因此产品存在于数据库中。

问题是当我分配过去已经分配的产品时,会引发“非唯一异常”。在这种情况下,我只是跳过关联。那怎么可能?

3 个答案:

答案 0 :(得分:1)

您可以将create_withfind_or_create_by结合使用:

(1..10).each do |page|
  group.products << Product.create_with(title: "Example A").find_or_create_by(id: 1)
  group.products << Product.create_with(title: "Example B").find_or_create_by(id: 2)
  group.save
end

答案 1 :(得分:0)

您要在创建重复项的十次循环中将相同的动态对象数组分配给group.products。为什么不循环运行呢?我不认为有必要进行循环。

答案 2 :(得分:0)

其他选项可能是使用 first_or_initialize:

(1..10).each do |page|
  group.products << Product.where(id: 1).first_or_initialize(title: "Example A").save
  group.products << Product.where(id: 2).first_or_initialize(title: "Example B").save
  group.save
end