Rails范围包含groupby计数

时间:2015-09-30 00:38:59

标签: ruby-on-rails postgresql

我有一个模特'用户'这可以有多个游乐设施' (has_many:骑)。 Ride的表格如下:

# Table name: rides
#
#  id                       :integer          not null, primary key
#  user_id                  :integer
#  title                    :text
#  description              :text

我想在Ride模型中创建一个名为' is_multiple_ride'返回拥有拥有多个游乐设施的用户的游乐设施。该查询几乎与distinct(:user_id)

相反

我创建的范围如下所示:

scope :multiple_live_listings, -> {
   where(user_id: Ride.group(:user_id).having("COUNT(user_id) > 1").pluck(:user_id))
}

这个范围有效但与多个链式范围一起使用时效率很低,因为它查询整个Ride表以获取游戏(为了获取ID然后在范围查询中使用它们)而不是仅检查乘坐当前查询。

如果有更有效的方法可以帮助我们!我正在使用PostgreSQL 9.3.5和Rails 3.2.2,欢呼!

1 个答案:

答案 0 :(得分:0)

如果有3个游乐设施的用户,如果你想让游戏范围返回所有3个游乐设施,那么你必须稍微远离rails帮助者(例如下面的例子)。如果你只想要一个属于具有多个游乐设施的用户的单次骑行,那么Muntasim的解决方案将起作用。

scope :multiple_live_listings, -> {
  where('rides.user_id IN (SELECT user_id FROM rides GROUP BY user_id HAVING COUNT(user_id) > 1)')
}