Не удается обновить данные, созданные с помощью гемов Populator и Faker - PullRequest
2 голосов
/ 14 марта 2011

Я использовал гем Популяра Райана Бейтса вместе с гемом Факера, чтобы заполнить свою базу данных для разработчиков 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 обходит валидацию, чтобы быстро сохранять большие объемы данных.Это примерно столько же смысла, сколько я могу себе представить.

1 Ответ

1 голос
/ 14 марта 2011

Единственное, о чем я могу думать, это исключение на уровне базы данных. Возможно, ваша база данных ожидает другого типа данных для voice_count или, возможно, это расчетное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...