Массовое обновление атрибута на нескольких моделях в ActiveRecord? - PullRequest
10 голосов
/ 26 октября 2010

У меня есть простая 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 Ответ

33 голосов
/ 26 октября 2010

Я полагаю, вы ищете update_all .

В вашем примере вы бы переписали что-то вроде

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

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

user.posts.update_all("privacy = 'private'")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...