Ruby on Rails:奇怪的投票增量行为

时间:2011-03-18 07:09:20

标签: ruby-on-rails ruby database ruby-on-rails-3

所以我有一个up和downvote按钮,它将值为1或-1的投票插入数据库。这工作正常。然后,我通过总结其投票的值来显示该元素的总投票数。但是,这不能正常工作,因为投票总和显示的行为非常奇怪:

对视频的第一次投票似乎根本没有增加。然后第二次投票。如果我从一个upvote转到downvote,它会递增一次,然后下一个downvote就会关闭。这很难解释,但也许你可以弄清楚我的代码有什么问题。

我在我的视频模型中有这个功能(投票的元素,它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 个答案:

答案 0 :(得分:1)

很难说没有看到所有代码,但我会尝试更改vote_sum

def vote_sum
  video_votes.sum(:value)
end

...看看协会是否正常运作。这样您就可以将问题缩小为Video对象的vote_sum缓存列。

您还可以尝试以下操作,而不是在导致问题的情况下覆盖vote_sum属性:

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

我假设控制器/ view / js逻辑是正确的。使用像Cucumber这样的工具进行测试驱动开发的经典案例,但这是另一个完整的讨论。