ruby on rails-如何创建一个根据记录计数返回true或false的方法



我正在尝试创建一个返回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中除了nilfalse,之外,所有内容都是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调用。我总是用大号。

最新更新