我很难弄清楚如何在我的模型中使用范围方法编写多层排序,它可以对模型的属性及其相关子模型的属性进行排序?
更具体地说,我有以下模型,每个模型都是前一个模型的相关子模型(我为了简洁而排除了其他模型方法和声明):
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
模型。
感谢。
答案 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')
}