Rails 3.x 如何根据行值编写全部更新?

Posted

技术标签:

【中文标题】Rails 3.x 如何根据行值编写全部更新?【英文标题】:Rails 3.x How to write update all based on row value? 【发布时间】: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/… 本来可以,但在那种情况下不是。 【参考方案1】:

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

User.update_all("last_login=updated_at")

这个语句可以正常工作。

【讨论】:

以上是关于Rails 3.x 如何根据行值编写全部更新?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 - pundit - 如何编写 if 语句来检查用户权限

根据同一行中的行值逐行更新列值

Mysql根据不同的行更新表中的行值

PYSPARK:根据条件用另一个行值更新一行中的值?

通过特定行值动态获取列名

如何在 Rails 中发现模型属性?