Rails,实现投票系统,每个用户只允许1次upvote / downvote

时间:2013-04-07 19:06:12

标签: ruby-on-rails methods where vote

有人可以告诉我为什么这段代码不起作用?在我的本地服务器上进行测试时,它会一直闪烁“当你没有这个时,你已经提出了这个问题”。

这是我的投票控制员代码。

  def upvote
    @vote = Vote.find(params[:post_id])

    if current_user.votes.where(post_id: params[:post_id], value: 1)
      flash[:notice] =  "You have already upvoted this!"
      redirect_to :back
    else
      @vote.update_attributes(value: 1)
      @vote.user_id = current_user.id
    end
  end

第4行if current_user.votes.where(post_id: params[:post_id], value: 1)是否是实现where方法的正确方法?

1 个答案:

答案 0 :(得分:4)

您应该使用exists?

if current_user.votes.where(post_id: params[:post_id], value: 1).exists?

如果您仅使用current_user.votes.where(...),则会得到一个Relation对象,该对象在true中始终被解释为if值,即使是Relation }不匹配任何行(只有falsenil在Ruby中被视为虚假值。)