我有这个示例代码,它引发了“重复期望”。相反,我只想跳过是否存在重复项。
(1..10).each do |page|
group.products << [{id: 1, title: "Example A"}, {id: 2, title: "Example B"}]
group.save
end
仅在此示例中,产品数组是静态的,重要的是它具有ID,因此产品存在于数据库中。
问题是当我分配过去已经分配的产品时,会引发“非唯一异常”。在这种情况下,我只是跳过关联。那怎么可能?
答案 0 :(得分:1)
您可以将create_with
与find_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