在使用upsert时出现undefined method 'keys'错误

3
我想使用upsert_all方法在一个简单的查询中插入(和更新)来自集合的记录,例如:
books = [] 

10.times do |i|
  books << Book.new(name: "book #{i}")
end

Book.upsert_all(books)

然而,我遇到了以下错误:
.../activemodel-6.1.4.1/lib/active_model/attribute_methods.rb:469:in `method_missing': undefined method `keys' for #<Book id: nil, name: "book 0"> (NoMethodError)

我想要做的是能够将任意集合,例如书籍,作为插入全部或更新全部操作进行插入,如果你能帮助我,我将不胜感激。

1个回答

6

upsert_all期望一个哈希数组,而不是ActiveRecord对象:

books = [] 

10.times do |i|
  books << { name: "book #{i}" }
end

Book.upsert_all(books)

1
更加优雅的写法是 books = 10.times.map { |i| { name: "book #{i}" }} - max
你说得对,更加优雅并且遵循良好的实践方式在每个集合中进行分配。非常感谢@max :D - Samuel Da Costa
@max - 实际上应该是 Array.new(10) { |i| {name: "book #{i}"} } :) - BroiSatse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接