我有一个带有用户模型和课程模型的rails应用程序 用户has_many课程和课程有很多学生(用户) 如何按用户在所有课程中的学生总数对用户进行排序 我尝试了类似的东西
User.joins(:courses).group('users.id').order("COUNT(course.users) DESC")但它没有用。我怎么做到这一点?
class Course < ActiveRecord::Base
searchkick
belongs_to :user
belongs_to :category
has_many :coursejoins, dependent: :destroy, foreign_key: "learnable_id"
has_many :students, through: :coursejoins, class_name: "User"
has_many :documents, dependent: :destroy
has_many :comments, dependent: :destroy
..
User.rb
class User < ActiveRecord::Base
searchkick
has_many :courses, dependent: :destroy
has_many :coursejoins, dependent: :destroy, foreign_key: "student_id"
has_many :learnables, through: :coursejoins, class_name: "Course"
has_many :comments, dependent: :destroy
before_save { self.email = email.downcase }
validates :name, presence: true, length: { minimum: 5, maximum: 40 }
..
答案 0 :(得分:0)
有点过于复杂,但这是你可以做的事情:
在课程模型中添加以下内容以缓存每门课程的用户数:
has_many :users, through: :students, counter_cache: true
然后,您需要将列users_count
添加到courses
表,并且您可能需要初始化计数器,以便查找reset_counters方法。
在此之后我认为这个查询应该有效:
User.joins(:courses).select("users.id, sum(courses.users_count)").group('users.id').order("sum(courses.users_count)")