ActiveRecord中多个模型的批量更新属性?

时间:2010-10-26 16:34:54

标签: ruby-on-rails activerecord

我有一个简单的has_many关联,我想将一个属性从public更改为private关联的对象。最好的方法是什么:

class User < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :user
end

user = User.first #=> #<User...>
user.posts.count #=> 100
# something like this:
user.posts.bulk_update_attribute("privacy", "private") #=> 1 DB call

1 个答案:

答案 0 :(得分:33)

我相信您正在寻找update_all

在您的示例中,您将其重写为

Post.update_all("privacy = 'private'", ["user_id = ?", user.id])

或者@ jenjenut233指出

user.posts.update_all("privacy = 'private'")