Rails模型中的多层排序

时间:2013-02-03 17:58:50

标签: ruby-on-rails ruby-on-rails-3 rails-models

我很难弄清楚如何在我的模型中使用范围方法编写多层排序,它可以对模型的属性及其相关子模型的属性进行排序?

更具体地说,我有以下模型,每个模型都是前一个模型的相关子模型(我为了简洁而排除了其他模型方法和声明):

class Course < ActiveRecord::Base 
  has_many :questions
  # would like to write multi-layer sort here 
end 

class Question < ActiveRecord::Base 
  belongs_to :course, :counter_cache => true
  has_many: :answers

end 

class Answer < ActiveRecord::Base 
  belongs_to :question, :counter_cache => true
end

我想首先按questions_count(通过我的counter_cache),然后answer_count排序,最后按created_at排序,并且想知道如何将所有内容组合成一个范围方法以放入我的Course模型。

感谢。

1 个答案:

答案 0 :(得分:4)

如此处所示(使用已连接的模型创建范围):problem: activerecord (rails3), chaining scopes with includes

此处(使用多列排序):Ruby on Rails: how do I sort with two columns using ActiveRecord?

最后在这里(按相关模型排序):Rails 3. sort by associated model

你可以这样做:

scope :complex_sorting, lambda {
    joins(:questions)
    .order('questions_count DESC, question.answers_count DESC, created_at DESC')
}