ZeroDivisionError - acts_as_votable

时间:2014-01-01 03:27:16

标签: ruby-on-rails ruby

我正在使用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

1 个答案:

答案 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>