如何在控制台中将表Notification.email更新为true?
在控制台中,我想循环遍历表中的所有记录并设置email = true。
想法?
答案 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_all
。 See 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注入攻击;或者是安全的并且使用哈希。