我有2个相互关联的课程
class Trip < ActiveRecord::Base
has_many :passengers
end
和一个班级
class Passenger < ActiveRecord::Base
belongs_to :trip
end
我的想法是让大多数旅行中的X乘客成为最佳人选。
我发现您可以使用类似
之类的东西来计算每位乘客的条目def count_passenger_trips
pas_names = Passenger.pluck(:name)
pas_names.each do |p|
puts p
puts Passenger.where(:name => p).count
pas_names.delete(p)
end
end
但它并没有真正返回正确的结果(始终保留数组中的最后一个条目而不计算它/从数组中删除它)
我想我可以使用键值对创建一个新数组,然后按计数排序。想知道在最后一位乘客中不计算可能存在什么问题,也许有一种更简单的方法可以做到这一点(因为我想在我的网页上添加一批Top乘客)。
答案 0 :(得分:1)
如果name
是这些Passenger
实体的唯一标识符,您可以执行以下操作:
Passenger.group(:name).count
这应该会给你带来如下结果:
{
'Jane Doe' => 25,
'Bob Smith' => 35,
'Heywood Johnson' => 1,
}
如果你没有为它们设置索引,这些可能是昂贵的查询,所以要小心。
如果您只想找到至少10次旅行的人,您可以这样做:
Passenger.group(:name).having('count(*) >= 10').count