Я использовал гем Популяра Райана Бейтса вместе с гемом Факера, чтобы заполнить свою базу данных для разработчиков 2k пользователями, 10k постами и 1 ... 2k голосов за пост.Я успешно сгенерировал данные, но забыл обновить поле в моей модели постов.Это counter_cache голосов, связанных с сообщением.
Теперь я пытаюсь вернуться и обновить базу данных, чтобы иметь точное значение для каждого объекта сообщения.Однако, кажется, что это не работает из среды "rails console", когда я использую этот маленький метод:
def post_updater
Post.all.each do |p|
p.votes_count = p.votes.count
p.save!
end
end
Я вызываю post_updater и не получаю ошибок.Однако, когда я набираю это
a = Post.first
a.votes_count
=> 0
, это верно, если я также использую Post.last.Я подумал, что это может быть просто случайность и, возможно, существуют объекты Post с 0 голосами (что в любом случае не должно быть правдой, но давайте предположим ...).Я все еще могу сделать это:
a = Post.first
a.votes_count = a.votes.count
a.save!
=> true
a.votes_count
=> 667
Post.find(a.id)
=> #<Post id: 2175, post_content: "Eveniet adipisci doloremque laborum ea sit sequire...",
user_id: 2180, category_id: 5, created_at: "2010-04-14 20:06:21",
updated_at: "2011-03-13 22:01:22",votes_count: 0, flags_count: nil, rank: nil>
Может кто-нибудь пролить свет на то, что здесь происходит?Я знаю, что гем populator обходит валидацию, чтобы быстро сохранять большие объемы данных.Это примерно столько же смысла, сколько я могу себе представить.