我在一个数组中有注释列表。我可以在数组上使用update_all吗?
comments = Comments.find(:all,:conditions => ["test is not null"])
comments.update_all(:test => nil)
答案 0 :(得分:9)
如果你使用范围(find
或all
- 在旧版本的Rails中返回一个数组),你可以这样做:
comments = Comments.scoped(:conditions => "test IS NOT NULL")
comments.update_all(:test => nil)
在现代版本的Ruby / ActiveRecord上,你可以写:
Comments.where.not(test: nil).update_all(test: nil)
答案 1 :(得分:3)
update_all是ActiveRecord提供的方法,你拥有的是一个数组,有两个选项可以通过注释使用ActiveRecord(将更新数据库)或映射数组,只更改内存中的objets而不修改数据库:
comments = Comments.update_all({:test => nil}, 'test IS NOT NULL')
或
comments = Comments.find(:all,:conditions => ["test is not null"])
comments.map! { |c| c.test = nil unless c.test}
编辑:第二个例子中的错误是c.test not c