有人可以告诉我为什么这段代码不起作用?在我的本地服务器上进行测试时,它会一直闪烁“当你没有这个时,你已经提出了这个问题”。
这是我的投票控制员代码。
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方法的正确方法?
答案 0 :(得分:4)
您应该使用exists?
if current_user.votes.where(post_id: params[:post_id], value: 1).exists?
如果您仅使用current_user.votes.where(...)
,则会得到一个Relation
对象,该对象在true
中始终被解释为if
值,即使是Relation
}不匹配任何行(只有false
和nil
在Ruby中被视为虚假值。)