Rails范围与HABTM关系计数

时间:2011-11-11 21:07:07

标签: ruby-on-rails ruby activerecord scope has-and-belongs-to-many

我有一个与User类有HABTM关系的Event类。我正在尝试创建一个Event范围,该范围仅包含有2个与之关联的用户的事件。

我目前有一个Event#status方法,它返回以下内容:

def status
  self.users.length == 2 ? "matched" : "not matched" 
end

所以现在基本上我正试图找到如何编写包含所有“匹配”事件的范围。我试过了scope :matched, self.users.length == 2,但根本没有用,但是我有类似的方法吗?

编辑:这个类方法正确地执行了这个操作,但如果我可以将它封装在范围内,它仍然很好。

def self.pending
  Event.all.map { |e| e if e.status == "matched" }
end

1 个答案:

答案 0 :(得分:0)

你在这里遇到了一些问题。现在,你的status方法正在返回文字字符串,这有点令人惊讶 - 让它返回一个布尔值会更常见。此外,名称status不具有描述性 - 也许exactly_two_users?会更好。此外,如果您使用users.count而不是users.length,那么数据库将更有效地进行计数。

我认为你的范围可能只是where(:users.count => 2)