首页 > 解决方案 > Rails 控制台更新

问题描述

您好,我正在尝试使用 rails 控制台更新表中的数据。

Box.where("code = 'learning'").update(duration: 10)

我运行了这个命令。

数据暂时发生变化。

Box.where("code = 'learning'")

当我运行它时,正在显示宝贵的数据。

谁能让我这个问题。先感谢您。

标签: ruby-on-railsrails-console

解决方案


#update更新单个记录。

user = User.find_by(name: 'David')
user.update(name: 'Dave')

它将根据记录是否实际更新而返回真/假。您可以通过检查错误对象来查看验证错误:

user.errors.full_messages

在种子文件和控制台等非用户交互情况下,使用 bang 方法会很有帮助,如果记录无效,#update!这将引发异常。#save!#create!

如果您想一次更新多条记录,您需要使用#update_all

Box.where("code = 'learning'")
   .update_all(duration: 10)

这将创建单个 SQL 更新语句,并且是迄今为止性能最高的选项。

您还可以遍历记录:

Box.where("code = 'learning'").find_each do |box|
  box.update(duration: 10)
end

如果您要更新的值必须在应用程序中计算,这有时是必要的。但它要慢得多,因为它会创建 N+1 个数据库查询。


推荐阅读