Разбиение нескольких объектов одной и той же модели на одной странице с помощью Kaminari - PullRequest
0 голосов
/ 02 марта 2019

Фон

На моем веб-сайте я пытаюсь отобразить 2 таблицы с данными, которые я удалил с другого веб-сайта и поместил в объект с именем Product.Объект Product имеет 2 категории, которые хранятся в виде перечислений, зарегистрированных и незарегистрированных.

Проблема

Проблема возникает, когда я применяю нумерацию страниц в Kaminari.Ниже приведены некоторые изображения, демонстрирующие проблему.

До возникновения проблемы

Когда я нажимаю «2» в таблице «Зарегистрированные продукты», таблица «Незарегистрированные продукты» также переходит к «2 '

Проблема

Я полагаю, это потому, что данные из обеих таблиц получены из одного и того же объекта?В любом случае ниже приведены соответствующие файлы.

Моя модель

class Product < ApplicationRecord
enum product_type: [:registered, :unregistered, :cosmetic]

paginates_per 8
end

Мой контроллер

class HomeController < ApplicationController
 def index
  @registered_products = Product.where(product_type: 0).page params[:page]
  @unregistered_products = Product.where(product_type: 1).page params[:page]
 end
end 

Моя часть для зарегистрированных продуктов

<table>
  <thead>
    <tr>
      <th scope='col'>Name</th>
      <th scope='col'>Chemical</th>
    </tr>
  </thead>
  <tbody>
    <% @registered_products.each do |product| %>
      <tr>
        <td><%= product.product_name %></td>
        <td><%= product.chemical %></td>
       </tr>
    <% end %>
  </tbody>
</table>
<%= paginate @registered_products %>

Моя часть для незарегистрированных продуктов такая же, замените @registered_products @ незарегистрированными продуктами.

index.html.erb

<h2>Registered Products</h2>
<%= render partial: "registered" %>
<h2>Unregistered Products</h2>
<%= render partial: "unregistered" %>

То, что я пробовал

Я просматривал документацию Kaminari и заметил, что массивы можно разбить на страницы.Я попробовал это.Ниже приведены измененные файлы.

Контроллер

class HomeController < ApplicationController
 def index
  registered_products = Product.where(product_type: 0).to_a
  unregistered_products = Product.where(product_type: 1).to_a

  @registered_products_array =  Kaminari.paginate_array(registered_products).page(params[:page]).per(10)
  @unregistered_products_array = Kaminari.paginate_array(unregistered_products).page(params[:page]).per(10)
 end
end

Все остальные соответствующие файлы аналогичны, просто замените созданными новыми глобальными переменными.Проблема все еще сохраняется.

Итак, мои вопросы: как я могу решить эту проблему, и возникает ли эта проблема, потому что я разбиваю на страницы один и тот же объект несколько раз на одной странице?

Спасибо зачтение, хорошего дня!

1 Ответ

0 голосов
/ 02 марта 2019

Причина, по которой возникает эта проблема, заключается в том, что вы используете тот же атрибут params[:page] для навигации по страницам.Это приводит к тому, что один и тот же номер передается в оба запроса для вашей модели Product.Вместо этого вам нужно будет сделать это, чтобы заставить его работать.

Частично для зарегистрированной страницы:

...
<%= paginate @registered_products, param_name: :registered_page_no %>

И в незарегистрированной части страницы вам придется сделать то же самое, но суникальное имя типа unregistered_page_no

В вашем контроллере все, что вам нужно сделать, это:

class HomeController < ApplicationController
 def index
  @registered_products = Product.where(product_type: 0).page params[:registered_page_no]
  @unregistered_products = Product.where(product_type: 1).page params[:unregistered_page_no]
 end
end 

Чтобы узнать больше о param_name, прочитайте документы: https://github.com/kaminari/kaminari#changing-the-parameter-name-param_name-for-the-links

...