如何根据记录计数创建返回true或false的方法

时间:2011-06-28 22:37:58

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试创建一个返回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

知道我做错了什么。它没有任何空白

4 个答案:

答案 0 :(得分:5)

除了nilfalse,之外,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调用。我总是使用尺寸。