【问题标题】:Rails HABTM Query based on count基于计数的 Rails HABTM 查询
【发布时间】:2014-09-30 15:35:35
【问题描述】:

在我的 Rails 应用程序中,用户拥有并属于许多项目,而项目拥有并属于许多用户。

我想对拥有多个项目的用户进行查询,返回所有满足此条件的用户的活动记录。

如何在 Rails 控制台中执行此查询?

我想我可以这样做:

User.joins(:projects).where('projects.count > ?', 0)

但是由于计数不是项目的属性,所以这不起作用。

【问题讨论】:

  • 使用“having”和“group”来使用基于聚合函数的条件。或者,您可以使用子查询执行此查询: User.where("id in (select user_id from projects_users)")

标签: sql ruby-on-rails activerecord model-associations


【解决方案1】:

要使用having,你需要先分组。

User.joins(:projects).group('projects_users.user_id').having('count(projects.id) > 1')

但更好的是,将您的 HABTM 关联更改为 has_many - 但是在 usersprojects 之间建立连接模型还有很多额外的好处(例如跟踪 when 他们是关联的,关联了他们,以及他们在项目中是否有任何特定角色等)无论如何都会推荐关联更改。

【讨论】:

  • 已将group('projects.user_id') 中的拼写错误更改为group('projects_users.user_id'),因此它现在适用于HABTM
【解决方案2】:
User.joins(:projects).group('projects_users.user_id').having('count(projects.id) > 1').count

如果大于 1,它将返回一个带有 project_ids 键和 count 值的哈希。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多