根据间接映射数据排序后获取数据

时间:2016-03-31 06:00:19

标签: ruby postgresql ruby-on-rails-4 rails-activerecord

PostgreSQL数据库上考虑以下模型。

class Foo < ActiveRecord::Base
  has_many :bars
end

class Bar < ActiveRecord::Base
  has_many :cars
  belongs_to :foo
end

class Car < ActiveRecord::Base
  has_many :jars
  belongs_to :bar
end

class Jar < ActiveRecord::Base
  belongs_to :car
end

我希望按Foo的数量顺序列出Jar

例如,考虑一组Foo个对象

[f1, f2, f3] 

每个Foo对象包含以下数量的Jar个对象

  

f1 =&gt; 1个Jar对象

     

f2 =&gt; 5 Jar对象

     

f3 =&gt; 2个Jar对象

然后所需的顺序是

[f2, f3, f1]

1 个答案:

答案 0 :(得分:2)

Foo.joins(bars: {cars: :jars}).group('foo.id, jars.id').order('COUNT(jars.id)')

Jar模型上写一个where子句:

Foo.joins(bars: {cars: :jars}).where(jars: {name: 'I am jar'})