首页 > 解决方案 > 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 WHERE "ORDERS"."" IS NULL (ActiveRecord::StatementInvalid)

我错过了什么?

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

   order_ora.inspection_id = 333
   order_ora.save

它也给出了与以前相同的错误。

标签: ruby-on-railsrubyactiverecordrails-activerecord

解决方案


为什么要循环遍历结果?您可以在单个查询中执行此操作:

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') )

推荐阅读