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最初に( my を介してcounter_cache) 、次にanswer_count最後に でコースを並べ替えたいのですがcreated_at、すべてを 1 つのスコープ メソッドにまとめてCourseモデルに入れる方法を考えていました。

ありがとう。

4

1 に答える 1

4

ここに見られるように(結合されたモデルでスコープを作成する):問題:activerecord(rails3)、インクルードによるスコープの連鎖

そしてここ(複数の列でソート):Ruby on Rails:ActiveRecordを使用して2つの列でソートするにはどうすればよいですか?

そして最後にここ (関連付けられたモデルによる並べ替え): 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 に答える