使用 upsert 时未定义方法“keys”

Sam*_*sta 3 ruby activerecord rubygems ruby-on-rails

我想使用 upsert_all 方法在简单查询中从集合中插入(和更新)记录,例如:

books = [] 

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

Book.upsert_all(books)
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

.../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)
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是能够插入所有或 upsert_all 任意集合作为一本书,例如,如果您能帮助我,我将不胜感激

Bro*_*tse 6

upsert_all需要一个哈希数组,而不是 ActiveRecord 对象:

books = [] 

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

Book.upsert_all(books)
Run Code Online (Sandbox Code Playgroud)