用户自己参考的课程对学生进行排序

时间:2016-04-05 23:43:45

标签: ruby-on-rails activerecord rails-activerecord

我有一个带有用户模型和课程模型的rails应用程序 用户has_many课程和课程有很多学生(用户) 如何按用户在所有课程中的学生总数对用户进行排序 我尝试了类似的东西

User.joins(:courses).group('users.id').order("COUNT(course.users) DESC")
但它没有用。我怎么做到这一点?
Course.rb

  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 }
      ..

1 个答案:

答案 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)")