Kaminari:: Метод ячеек paginate ничего не рендерит
Я использую гем Kaminari::Cells, и когда я использую метод paginate в представлении ячейки, ничего не появляется. Я проверил, и метод paginate просто возвращает "\n".
3 ответа
Я не уверен, почему это работает, но Athlon-Krum предложил удалить paginator.render do
блок из _paginator.html.erb
Kaminari просмотреть файл, изменив его так:
<%= paginator.render do %>
<%- pagination_class ||= '' %>
<ul class="pagination <%= pagination_class %>">
<%= first_page_tag unless current_page.first? %>
<%= prev_page_tag unless current_page.first? %>
<% each_page do |page| -%>
<% if page.left_outer? || page.right_outer? || page.inside_window? -%>
<%= page_tag page %>
<% elsif !page.was_truncated? -%>
<%= gap_tag %>
<% end -%>
<% end -%>
<%= next_page_tag unless current_page.last? %>
<%= last_page_tag unless current_page.last? %>
</ul>
<% end %>
к этому:
<%- pagination_class ||= '' %>
<ul class="pagination <%= pagination_class %>">
<%= paginator.first_page_tag unless current_page.first? %>
<%= paginator.prev_page_tag unless current_page.first? %>
<% paginator.each_page do |page| -%>
<% if page.left_outer? || page.right_outer? || page.inside_window? -%>
<%= paginator.page_tag page %>
<% elsif !page.was_truncated? -%>
<%= paginator.gap_tag %>
<% end -%>
<% end -%>
<%= paginator.next_page_tag unless current_page.last? %>
<%= paginator.last_page_tag unless current_page.last? %>
</ul>
и это похоже на работу. Не забудьте подготовить paginator.
вызовам метода Kaminari, чтобы заставить его работать (примеры выше показывают это изменение, но его легко пропустить).
По моему опыту это была проблема того, что в kaminari
#paginate
помощник назначает @template
как self
места, где называется помощник. В обычном представлении Rails @template
будет анонимным классом, шаблон представления, который наследуется от ActionView::Base. В клетке @template
будет экземпляром самой клетки. kaminari
когда рендер использует ActionView::OutputBuffer
, Это имеет значение, потому что мнение #render
и клетка #render
ведет себя по-разному, и клетка #render
не кладите ничего в выходной буфер.
Быстрое решение состоит в том, чтобы опустить выходной буфер:
Kaminari::Helpers::Paginator.class_eval do
def render(&block)
instance_eval(&block) if @options[:total_pages] > 1
# @output_buffer
end
end
Я знаю, что этому вопросу почти 6 лет, но он определенно помог мне наладить совместную игру Kaminari и Cells. В
kaminari-cells
gem не работает с Rails 6, поэтому я сделал это, чтобы заставить его работать в моем проекте. По сути, это всего два файла, поэтому я добавил их в свой проект.
# app/helpers/kaminary/helpers/cells_helper.rb
require 'kaminari/helpers/helper_methods'
require 'cell/partial'
module Kaminari
module Helpers
module CellsHelper
include Kaminari::Helpers::HelperMethods
include ActionView::Helpers::OutputSafetyHelper
include ActionView::Helpers::TranslationHelper
include Cell::ViewModel::Partial
def paginate(scope, paginator_class: Kaminari::Helpers::Paginator, template: nil, **options)
options = options.reverse_merge(:views_prefix => "../views/")
super
end
end
end
end
# app/models/concerns/kaminary/cells.rb
module Kaminari
module Cells
extend ActiveSupport::Concern
included do
include Kaminari::Helpers::CellsHelper
end
end
end