从belongs_to表中将乘客置于轨道4中

时间:2014-12-15 17:47:26

标签: ruby-on-rails ruby

我有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乘客)。

1 个答案:

答案 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