Как получить отображаемый диапазон в Каминари

#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]