我正在尝试创建一个返回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
知道我做错了什么。它没有任何空白
答案 0 :(得分:5)
除了nil
和false,
之外,Ruby中的一切都是真的,这意味着0
实际上是 true。
尝试类似:
def has_user_voted?(user)
self.poll_votes.where(:user_id => user.id).length > 0
end
这只是一个例子,我假设你也想要投票,所以你的真实版本会使用poll_votes,
,如果没有,你可能只想使用#count
。
答案 1 :(得分:2)
这应该是一种非常有效的方法:
def has_user_voted?(user)
self.poll_votes.exists?(['user_id = ?', "%#{user.id}%"])
end
答案 2 :(得分:1)
如果您只是想知道是否有匹配的记录,您应该使用内置的count
方法,而不是不必要地检索一堆行并实例化所有这些对象。 e.g:
def has_user_voted? user
poll_votes.where(:user_id => user.id).count > 0
end
答案 3 :(得分:0)
需要注意的另一个技术性问题:
def has_user_voted?用户 poll_votes.where(:user_id =&gt; user.id).size&gt; 0 端
.size将发出db .count,或者如果已经加载了关联,它将获得数组的长度,甚至不执行sql调用。我总是使用尺寸。