我可以在阵列上使用update_all吗?

时间:2011-06-28 11:19:10

标签: ruby-on-rails ruby

我在一个数组中有注释列表。我可以在数组上使用update_all吗?

comments = Comments.find(:all,:conditions => ["test is not null"]) 

comments.update_all(:test => nil)

2 个答案:

答案 0 :(得分:9)

如果你使用范围(findall - 在旧版本的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