【问题标题】:Rails scope with HABTM relationship count具有 HABTM 关系计数的 Rails 范围
【发布时间】:2011-11-11 21:07:06
【问题描述】:

我有一个与用户类有 HABTM 关系的事件类。我正在尝试创建一个事件范围,其中仅包含与它关联的 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

【问题讨论】:

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


    【解决方案1】:

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

    我相信您的范围可能只是 where(:users.count => 2)

    【讨论】:

    • 我实际上稍微简化了方法,它应该返回三种不同的状态。不幸的是,where(:users.count => 2) 不起作用 - 它表示符号没有计数方法。
    • 也许'users.count' 可以代替;我只是快速搜索了语法但没有成功。无论如何,这是基本的想法。
    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多