#ruby-on-rails #kaminari
#рубин на рельсах #каминари
Вопрос:
Мне нужно настроить _pagination.html.erb
отображение той же информации, page_entries_info
что и вспомогательный метод, например: Отображение записей с 6 по 10 из 26.
Имея _pagination.html.erb
такое:
lt;%= paginator.render do -%gt; lt;% end -%gt;
Какие методы или объекты доступны для получения отображаемого в данный момент диапазона (от 6 до 10 в приведенном выше примере) и общего количества записей, разбитых на страницы (26 в примере)?
Ответ №1:
Первый подход, вы можете переопределить локализацию Каминари для отображения формата "Showing %{entry_name} %{first} to %{last} of %{total}"
# config/locales/kaminari.yml en: ... helpers: page_entries_info: entry: zero: "entries" one: "entry" other: "entries" one_page: display_entries: zero: "No %{entry_name} found" one: "Showing lt;bgt;1lt;/bgt; %{entry_name}" other: "Showing lt;bgt;all %{count}lt;/bgt; %{entry_name}" more_pages: display_entries: "Showing %{entry_name} %{first} to %{last} of %{total}"
Второй подход, как вы хотите настроить _pagination.html.erb
# app/views/kaminari/_pagination.html.erb lt;%= paginator.render do -%gt; lt;% to = current_page.to_i * per_page %gt; lt;% from = to - per_page 1 %gt; lt;% total = total_pages * per_page - 1 %gt; Showing lt;%= @options[:entry_name].pluralize(total, I18n.locale) %gt; lt;%= from %gt; to lt;%= to %gt; of lt;%= total %gt; ... lt;% end %gt; # you need to pass an option `entry_name` # app/views/records/index.html.erb lt;%= paginate @records, entry_name: 'record' %gt;
Комментарии:
1. Спасибо. Для второго подхода, есть ли способ получить общее количество записей? Это помогло бы в крайних случаях, когда есть только одна страница с записями меньше, чем на страницу, и когда общее количество записей меньше, чем total_pages * на страницу.
2. @Victor передайте
@records.length
как вариантtotal
:paginate @records, entry_name: 'record', total: @records.length
, тогда вы могли бы показать итог как@options[:total]