【问题标题】:Rails 3.x How to write update all based on row value?Rails 3.x 如何根据行值编写全部更新?
【发布时间】:2012-05-08 00:34:20
【问题描述】:

我希望在添加列后在迁移文件中执行以下 SQL 查询(使用同一行中的现有列值更新新字段)

UPDATE users SET last_login=updated_at;

SQL 语句在数据库上执行时可以正常工作,但在 Rails 中我使用 ActiveRecord update_all 方法尝试了多种语法但没有成功

User.update_all("last_login=updated_at")

我收到以下错误

ActiveRecord::StatementInvalid: PGError: ERROR:  current transaction is aborted, commands ignored until end of transaction block
: UPDATE "users" SET last_login=updated_at

显然我的语法中缺少某些内容,但无法弄清楚是什么。 谁能指出正确的语法?

问候/J。

【问题讨论】:

  • 会不会是一些验证问题,比如这个链接上的例子? guides.rubyonrails.org/…
  • 本来可以,但在那种情况下不是。

标签: ruby-on-rails-3 activerecord


【解决方案1】:

语法确实正确,问题在于我必须回滚以前的transaction

User.update_all("last_login=updated_at")

这个语句可以正常工作。

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2017-06-21
    • 2023-03-30
    相关资源
    最近更新 更多