我有一个与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
答案 0 :(得分:0)
你在这里遇到了一些问题。现在,你的status
方法正在返回文字字符串,这有点令人惊讶 - 让它返回一个布尔值会更常见。此外,名称status
不具有描述性 - 也许exactly_two_users?
会更好。此外,如果您使用users.count
而不是users.length
,那么数据库将更有效地进行计数。
我认为你的范围可能只是where(:users.count => 2)
。