Ruby on rails Rails:按孙子辈的属性排序父母

Ruby on rails Rails:按孙子辈的属性排序父母,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,我需要按他的车的数量订购用户。因此,通过在下发的孙子属性对父对象进行排序 到目前为止: class User has_many :calendars has_many :cars, through: :calendars end class Calendar has_many :cars end class Car # attribute `issued_at` end 但是我越来越 @q = User.active.joins(:cars).order('cars.iss

我需要按他的车的数量订购用户。因此,通过在下发的孙子属性对父对象进行排序

到目前为止:

class User
  has_many :calendars
  has_many :cars, through: :calendars
end

class Calendar
  has_many :cars
end

class Car
  # attribute `issued_at`
end
但是我越来越

@q = User.active.joins(:cars).order('cars.issued_at').group('users.id')
使用distinct而不是group来消除重复项:

column "cars.issued_at" must appear in the GROUP BY clause or be used in an aggregate function

这是一份复制回购协议:

当进行相同的查询时,我没有看到任何错误,问题必须在您的活动范围内

以下是作用域为:active,->{where-active:true}的完整查询:

选择用户* 来自用户 calendars.user\u id=users.id上的内部联接日历 内部连接cars.calendar\u id=calendars.id上的汽车 其中users.active=? 按用户分组。id 汽车订购。于 限度
我无法复制您的问题。

由于用户可能有很多车,订购时应使用哪个值的Issuited_at?这个问题是您收到的错误消息的含意:您没有告诉PostgreSQL应该使用所有可能发出的_的哪个值来订购。例如,你可以使用maxcars.issued_最晚订购,但这取决于你的需要。但是,如果您对所有用户都感兴趣,则只需删除组部分即可。用户对象在此顺序中出现时可能会显示多次是的,在删除“活动”范围时,我也无法复制它。很好用。User.joins:cars.order'cars.issued_at'.group'users.id'
@q = User.active.joins(:cars).order('cars.issued_at').distinct