我正在使用acts_as_votable进行upvotes和downvotes。现在我试图显示一个'支持率',由upvotes / total votes计算。
问题是数据库中有一些资源,总票数为0,因此ZeroDivisionError。我该如何解决这个问题?
在视图中:
<td><%= "#{guide.upvotes.count/guide.votes.count}" %></td>
在控制器中:
def upvote
@guide = Guide.find(params[:id])
@guide.liked_by current_user
redirect_to :back
end
def downvote
@guide = Guide.find(params[:id])
@guide.downvote_from current_user
redirect_to :back
end
答案 0 :(得分:2)
您可以测试非零分母。您可以在视图中执行此操作:
<td><%= "#{guide.upvotes.count/guide.votes.count}" if guide.votes.count > 0 %></td>
或者,更好的是,您可以使用helper_method为您执行此操作:
def rating(guide)
guide.votes.count > 0 ? (guide.upvotes.count / guide.votes.count) : 0
end
在你看来打电话给你:
<td><%= rating(guide) %></td>
或者,更好的是,将其添加到您的指南模型中:
def rating
votes.count > 0 ? (upvotes.count / votes.count) : 0
end
在你看来......
<td><%= guide.rating %></td>