我正在运行简单的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
它也提供与以前相同的错误。
答案 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语句。