Проект Ruby on Rails 3. После обновления записи мы возвращаемся к индексу всех записей (а не к просмотру обновленной записи). Индекс страницы с Каминари. Как нам вернуться на страницу индекса, содержащую обновленную запись?
найти страницу для данной записи с помощью kaminari
Ответы (1)
Аналогичный вопрос и ответ для Java JPA/Hibernate Поиск страницы, содержащей данную запись, с помощью JPA (Hibernate), который показывает sql, необходимый для получения смещения записи в представлении индекса. Что-то типа
SELECT COUNT(*)
FROM Model r
WHERE r.column < ?
ORDER BY r.id
Номер страницы будет равен offset/records_per_page + 1.
Тогда возникает вопрос, как получить records_per_page из Kaminari? Kaminari позволяет установить количество записей на страницу в конфигурации и для конкретной модели через Model.paginates_per. Он предоставляет метод Model.default_per_page для получения количества записей на странице для модели.
Лучшее место для определения страницы будет в методе контроллера, который отображает индекс. Этот метод уже получает параметр страницы, если он есть, для отображения правильной страницы. Другим способом было бы вычислить страницу перед перенаправлением и отправить параметр страницы. Попробуем первое.
После сохранения редактирования мы перенаправляем в индекс с параметром, идентифицирующим запись, которую мы хотим включить на страницу индекса перенаправить с параметрами. Индекс сортируется по Model.column.
redirect_to model_index_url(:for_column => @model_record.column),
:notice => 'Record saved'
Затем в методе index контроллера мы позволяем параметру страницы управлять или вычисляем страницу из параметра for_column, если он присутствует.
page = 1
if (params[:page])
page = params[:page]
elsif (params[:for_column])
offset = Model.select('count(*) as count').where('? < column',
params[:for_column]).order(id).first
page = offset.count/Model.default_per_page + 1
end
@records = Model.all.order('column desc').page(page)
И, конечно же, Model и Model.column обозначают имя модели и столбца для вашего приложения.