我正在尝试创建一个返回true或false的方法。
这是我的
查看
<%= @poll.has_user_voted?(current_user) %>
型号
def has_user_voted?(user)
voted = self.poll_votes.where(:user_id => user.id).length
return !voted
end
知道我做错了什么吗。它没有返回任何空白
Ruby中除了nil
和false,
之外,所有内容都是true,这意味着0
实际上是true
试试类似的东西:
def has_user_voted?(user)
self.poll_votes.where(:user_id => user.id).length > 0
end
这只是一个例子,我想你也想要投票,所以你的现实版会使用poll_votes,
。如果没有,你可能只想使用#count
。
这应该是一个非常有效的方法:
def has_user_voted?(user)
self.poll_votes.exists?(['user_id = ?', "%#{user.id}%"])
end
如果您只想知道是否有任何匹配的记录,那么应该使用内置的count
方法,而不是不必要地检索一堆行并实例化所有这些对象。例如:
def has_user_voted? user
poll_votes.where(:user_id => user.id).count > 0
end
另一个需要注意的技术细节:
def has_user_voted?使用者poll_notes.其中(:user_id=>user.id).size>0结束
.size将发出db.count,或者如果关联已经加载,它将获取数组的长度,甚至不执行sql调用。我总是用大号。