1

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

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

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模型中。

谢谢。

4

1 回答 1

4

如此处所示(使用连接模型创建范围):问题:activerecord (rails3),使用包含链接范围

在这里(使用多列排序):Ruby on Rails:如何使用 ActiveRecord 对两列进行排序?

最后在这里(按关联模型排序):Rails 3. 按关联模型排序

您可以这样实现:

scope :complex_sorting, lambda {
    joins(:questions)
    .order('questions_count DESC, question.answers_count DESC, created_at DESC')
}
于 2013-02-03T18:41:04.263 回答