【问题标题】:Named_scope at least one in has_many associationhas_many关联中的named_scope至少有一个
【发布时间】:2010-06-30 04:24:39
【问题描述】:

我有一个用户模型 has_many :posts。如果我想创建一个 named_scope 来查找至少有一篇帖子的用户,这是否正确?

   named_scope :at_least_one_post, :joins => :posts, :group => "users.id"

或者我应该更进一步去做

   named_scope :at_least_one_post, :joins => :posts, :group => "users.id", :having => "COUNT(posts.id) > 0"

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    其实我认为没有必要分组或添加条件。因为您使用的是:joins,所以它将执行INNER JOIN,因此只会拉用户发布帖子。如果您要执行 :include,那将是 LEFT JOIN 并且您需要添加一个 HAVING 子句。

    所以你只需要

    named_scope :at_least_one_post, :joins => :posts
    

    【讨论】:

    • 你应该离开:group,否则当用户有多个帖子时会发生什么?由于 INNER JOIN,您将在结果集中获得大量重复的用户记录。 (除非 rails 自动为您过滤掉,我忘记了 - 即便如此,为什么要从数据库返回不必要的行?)
    • ORM 负责分组,即使在 LEFT JOIN 上也是如此。如果您从GROUP BY 语句开始分组,那么您将需要对SELECT 语句中的每一列进行分组或聚合。
    • 有没有简单的方法可以找到零帖子的用户?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多