Как упорядочить записи по ассоциации с has_many

У меня есть две таблицы, авторы и книги, у книг есть дата публикации, я хотел бы упорядочить авторов по дате их последней опубликованной книги, я делал это includes(:books).where(blablabla).order('books.published_date DESC'), но это нарушает нумерацию страниц kaminari (8 записей на странице, 9 для отображения ), я получаю правильные записи на первой странице, но на второй странице я получаю первые две записи с первой страницы плюс правильную запись.


person JohnGood    schedule 01.12.2015    source источник


Ответы (2)


Вы можете взглянуть на Yap. Вы можете определить псевдоним для books.published_date и сортировать по этому псевдониму. См. пример.

User.joins(:team).paginate(sort: {team: :asc}) # would sort by team.name

Используйте .includes(:team), если вам также нужно получить доступ к каким-либо его атрибутам, чтобы использовать нетерпеливую загрузку.

person AmShaegar    schedule 05.12.2015

Попробуй это:-

Author.includes(:books).where(blablabla).order('books.published_date DESC')

Обновление 1: -

@authors = Author.includes(:books).where(blablabla).order('books.published_date DESC')
@authors = @authors.page(params[:page)

Надеюсь, это может быть полезно!

person user3506853    schedule 01.12.2015
comment
извините, пропустил часть заказа при копировании из редактора кода - person JohnGood; 01.12.2015
comment
так что это именно тот запрос, который я делаю, он работает хорошо, но не с каминари - person JohnGood; 01.12.2015
comment
с обновлением 1 я получаю правильные записи для первой страницы, но для второй я получаю две первые записи с первой страницы, а затем последнюю (правильную) - person JohnGood; 01.12.2015