У меня есть модель lesson. И связанная модель user. И я хочу добавить сортировку по количеству пользователей к уроку. Я думал сделать что-то вроде этого:
lesson
user
lesson.rb
scope :popular, -> { order("users ASC") }
Но это не работает.
В вашей lesson модели сделайте это
scope :popular, -> { left_joins(:users).group(:id).order('COUNT(users.id) DESC') }
Я предположил, что lessons have_many users и users belongs_to lesson
lessons have_many users
users belongs_to lesson
Я бы начал с чего-то вроде этого:
scope :popular, -> { left_outer_joins(:users).group('lessons.id').order('COUNT(users.id) DESC') }
Объяснение:
left_outer_joins
join
group
count
DESC
Вместо использования литерала SQL для группировки вы также можете использовать драгоценный камень арела.
scope :popular, -> { left_joins(:users).group(:id).order(User.arel_table[:id].count.desc) }
Объяснение вышесказанному уже дано ответом spickermann так что я оставлю это Вы можете найти документацию по аренде здесь .