我很难弄清楚如何在我的模型中使用scope方法编写多层排序,该方法可以对模型的属性及其相关子模型的属性进行排序?
更具体地说,我有以下模型,每个模型都是前一个模型的相关子模型(为了简洁起见,我排除了其他模型方法和声明):
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
排序,我想知道如何将所有内容串成一个单独的scope方法来放入我的Course
模型中。
谢谢。
如图所示(创建具有联接模型的作用域):问题:activerecord(rails3),使用includes 链接作用域
这里(多列排序):RubyonRails:如何使用ActiveRecord对两列进行排序?
最后在这里(按关联模型排序):Rails 3。按关联模型排序
你可以这样实现:
scope :complex_sorting, lambda {
joins(:questions)
.order('questions_count DESC, question.answers_count DESC, created_at DESC')
}