Lance Pollard
Lance Pollard

Reputation: 79468

Bulk update attribute on multiple models in ActiveRecord?

I have a simple has_many association, and I want to change an attribute from public to private the associated object. What's the best way to do this:

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

Upvotes: 10

Views: 11912

Answers (1)

theIV
theIV

Reputation: 25794

I believe you are looking for update_all.

In your example, you'd rewrite it to be something like

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

Or as @jenjenut233 points out

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

Upvotes: 33

Related Questions