首页 > 解决方案 > # 方法缺失或方法未定义“upsert”

问题描述

我正在从需要不时更新的 TXT 文件中播种数据库,并想尝试新的 upsert 功能。

然而,在凌晨 4 点我几乎无法阅读屏幕并认为我正在做一些明显或愚蠢的事情,森林换树木的东西?

我已经重新阅读了文档并更新了 rails 版本,但是当我在对象上调用 upsert 时出现错误

NoMethodError: undefined method `upsert' for #<Trademark:0x000055a4c3234bd8>
/home/ubuntu/.rvm/gems/ruby-2.7.0/gems/activemodel-6.1.2/lib/active_model/attribute_methods.rb:469:in `method_missing'

我已将 RAILS 更新到 6.1.2。Ruby 为 2.7.0,数据库为 PG 1.2.3

列 :mark_number 在其上的数据库中具有唯一索引。

这是我的种子代码,我正在关注文档。

l 对象是上传的txt文件,我逐行遍历并拆分为一个数组。

t = mark.new
t.mark_hyperlink = l[1].split('"')[1].strip
t.mark_number=l[0].strip
puts t.mark_number
# Create bitstring of 45 classes
bitstring=""
 (12..56).each do |i|
  bitstring=bitstring + l[i]
 end
puts bitstring
t.class_bitstring=bitstring

# also tried inserting like this, comes back with fail
#upsert(t, returning: nil, unique_by: :mark_number)

t.upsert

任何指针表示赞赏

标签: ruby-on-railsupsert

解决方案


这是一个类方法,而不是实例方法。应该是这样的:

Trademark.upsert(attributes)

推荐阅读