Ruby on Rails: странное поведение приращения при голосовании - PullRequest
0 голосов
/ 18 марта 2011

Итак, у меня есть кнопка вверх и вниз, которая вставляет голосование со значением 1 или -1 в базу данных. Это работает правильно. Затем я отображаю общее количество голосов для этого элемента, суммируя значения его голосов. Тем не менее, это работает неправильно, потому что отображение суммы голосов ведет себя очень странно:

Первый голос по видео, похоже, не увеличивает его вообще. Тогда второе голосование делает. Если я иду от повышения к понижению, оно увеличивается один раз, а затем следующее снижение снижается. Это сложно объяснить, но, возможно, вы сможете понять, что не так с моим кодом.

У меня есть эта функция в моей модели видео (элемент, за который проголосовали, это has_many video_votes):

def vote_sum
  read_attribute(:vote_sum) || video_votes.sum(:value)
end

У меня также есть это в моей модели VideoVote:

after_create :update_vote_sum

private

  def update_vote_sum
    video.update_attributes(:vote_sum => video.vote_sum + value)
  end

Что я делаю не так?

1 Ответ

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

Трудно сказать, не видя весь код, но я бы попробовал изменить vote_sum

def vote_sum
  video_votes.sum(:value)
end

... чтобы убедиться, что ассоциация работает нормально. Таким образом, вы сузили проблему до того, что стали столбцом кэша vote_sum объекта Video.

Вы также можете попробовать следующее вместо переопределения атрибута voice_sum в случае возникновения проблем:

def total_vote_sum
  vote_sum || video_votes.sum(:value)
end

Я предполагаю, что логика контроллера / представления / js верна. Классический пример разработки, основанной на тестировании, с использованием такого инструмента, как Cucumber, но это совсем другое обсуждение. Lol.

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