2

有人能告诉我为什么这段代码不起作用吗?在我用于测试的本地服务器上,当我没有时,它会一直闪烁“你已经对此表示赞同”。

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

  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 方法的正确方法吗?

4

1 回答 1

4

你应该使用exists?

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

如果您只使用current_user.votes.where(...),您将获得一个Relation始终被解释为 中的true值的对象if,即使tyheRelation不匹配任何行(仅在 Rubyfalsenil被视为虚假值)。

于 2013-04-07T19:09:54.163 回答