在Rails控制台中。如何更新所有记录的字段?

时间:2011-10-07 21:41:47

标签: ruby-on-rails ruby-on-rails-3

如何在控制台中将表Notification.email更新为true?

在控制台中,我想循环遍历表中的所有记录并设置email = true。

想法?

4 个答案:

答案 0 :(得分:36)

这应该有效

Notification.all.each do |n| n.update_attribute(:email, true); end

编辑:从bricker制作自定义:

Notification.all.each { |n| n.update_attribute(:email, true) }

答案 1 :(得分:28)

您正在寻找update_allSee doc

注意,没有以这种方式触发回调。

答案 2 :(得分:13)

您可以使用:

Notification.update_all(email: true)

如果您在更新时另外有条件,则应使用:

Notification.find_each { |n| n.email = (n.id > 100) ? true : false }

对于庞大的数据库表,使用Something.all是个坏主意。

答案 3 :(得分:5)

Notification.update_all(email: true) 

是基本答案。

您不必通过编写自己的块来“循环”:您可以让活动记录为您完成艰苦的工作 - 这里有一个ID数组的示例,您想要更新他们的电子邮件(我基本上直接从我的一个控制器拿到这个例子):

@notifications = Notification.where(id: [1,2,3,4,5,6]).update_all(email: true)

编辑:大家注意sql注入不要在你的“where”方法中包含params [:notification_ids],原始字符串没有转义,否则你将遭受sql注入攻击;或者是安全的并且使用哈希。