Rails HABTM基于计数查询

时间:2014-09-30 15:35:36

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

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

我想对拥有多个项目的用户进行查询,为符合此条件的所有用户返回activerecords。

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

我以为我可以做类似的事情:

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

但由于count不是项目的属性,因此不起作用。

2 个答案:

答案 0 :(得分:2)

要使用having,您需要先进行分组。

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

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

答案 1 :(得分:0)

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

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