ActiveRecord 更新错误 - 非法的零长度标识符

ActiveRecord update error - illegal zero-length identifier

我是 运行 简单 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: illegal zero-length identifier: UPDATE "ORDERS" SET "TRANSFERED_AT" = :a1 WHERE "ORDERS"."" IS NULL (ActiveRecord::StatementInvalid)

我错过了什么?

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

   order_ora.inspection_id = 333
   order_ora.save

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

为什么循环遍历结果?您可以在单个查询中完成:

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

可能的问题是 Time.now 的格式不适合您的 table?在这种情况下使用 strftime:

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

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

问题是 我的 table 没有 PK,看起来 ActiveRecords 使用它来生成 SQL 语句。