我有一个模特'用户'这可以有多个游乐设施' (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,欢呼!
答案 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)')
}