Reputation: 79468
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
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