用Kaminari在同一页面上分割同一模型的多个对象

问题描述 投票:0回答:1

背景

在我的网站上,我试图显示2个表格,其中包含我从其他网站报废的数据,并放入一个名为Product的对象中。 Product对象有2个类别,存储为枚举,已注册和未注册。

问题

当我用Kaminari进行分页时,问题出现了。下面是一些展示问题的图片。

Before the problem

当我在Registered Products表上单击'2'时,Unregistered Products表也会变为'2'

Problem

我猜这是因为来自两个表的数据来自同一个对象?无论如何,下面是相关文件。

我的模特

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 %>

我对未注册产品的偏爱是相同的,用@unregistered产品替换@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

每个其他相关文件都与创建的新全局变量相同。问题仍然存在。

所以我的问题是如何解决这个问题,是不是因为我在同一页面中多次对相同的对象进行分页?

感谢您的阅读,祝您有个美好的一天!

ruby-on-rails ruby ruby-on-rails-5 erb kaminari
1个回答
0
投票

发生此问题的原因是因为您使用相同的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

© www.soinside.com 2019 - 2024. All rights reserved.