ruby-on-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 WHERE "ORDERS"."" IS NULL (ActiveRecord::StatementInvalid)
我错过了什么?
编辑:我需要在循环中使用它,因为我在其中进行其他计算。时间格式似乎不是问题,因为我正在尝试更新类型为“数字”的另一列,并且我遇到了同样的错误。如果我尝试这样做:
order_ora.inspection_id = 333
order_ora.save
它也给出了与以前相同的错误。
解决方案
为什么要循环遍历结果?您可以在单个查询中执行此操作:
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') )
推荐阅读
- c# - 聊天气泡功能的 Xamarin 递增循环
- javascript - 用户点击推送通知后如何更改视图 - Firebase - 本机脚本
- c++ - 链接器错误:在 VS2019 中使用 CMake 项目的函数“int __cdecl invoke_main(void)”中引用了未解析的外部符号 _main
- reactjs - 如何在 React Native 中存储和更新数据
- python-3.x - Python - 检查应用程序是否是 Web 浏览器
- r - R:从多列创建新的基于列的值列表
- kubernetes - Kubernetes - Nodeport 与负载均衡器
- ios - 从另一个应用程序使用 iOS Microsoft Word 本机应用程序打开 .docx 文件(托管在 OneDrive 上)
- swift - 如何删除领域父对象及其所有子对象?
- elixir - 在 Windows 上运行 Elixir 应用程序:无法设置短节点名称