ActiveRecord更新错误-无效的零长度标识符

时间:2019-06-21 08:17:53

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

我正在运行简单的Rails + ActiveRecord程序,我想从数据库中获取记录,其中“ transfered_at”列为空,并用当前时间对其进行更新。

orders_ora = Orders.where(transfered_at: nil)
orders_ora.each do |order_ora|

   puts order_ora.name 
   order_ora.update(transfered_at: Time.now)
end

但是,它不允许我这样做。这是我得到的错误:

  

OCIError:ORA-01741:非法的零长度标识符:UPDATE   “ ORDERS” SET“ TRANSFERED_AT” =:a1在哪里   “ ORDERS”。“” IS NULL(ActiveRecord :: StatementInvalid)

我想念什么?

编辑:我需要在循环中使用它,因为我正在其中进行其他计算。时间格式似乎不是问题,因为我试图更新另一列类型为“数字”的列,并且遇到了相同的错误。 如果我尝试这样做:

   order_ora.inspection_id = 333
   order_ora.save

它也提供与以前相同的错误。

2 个答案:

答案 0 :(得分:0)

为什么要遍历结果?您可以在单个查询中完成此操作:

Orders.where(transfered_at: nil).update(transfered_at: Time.now)

可能是一个问题,因为Time.now的表格式不正确?在这种情况下,请使用strftime:

Orders.where(transfered_at: nil).update(transfered_at: Time.now.strftime('%H:%M') )

答案 1 :(得分:0)

我自己找到了答案,这与代码无关。

问题是我的表没有PK ,并且ActiveRecords似乎使用它来生成SQL语句。