Массовый атрибут обновления для нескольких моделей в 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

Я считаю, что вы ищете update_all.

В вашем примере вы переписываете его как нечто вроде

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

Или как @jenjenut233 указывает

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