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 如何根据行值编写全部更新?的主要内容,如果未能解决你的问题,请参考以下文章