所以我有一个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
我做错了什么?
答案 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这样的工具进行测试驱动开发的经典案例,但这是另一个完整的讨论。