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

时间:2019-03-02 04:55:37

标签: ruby-on-rails ruby ruby-on-rails-5 erb kaminari

背景

在我的网站中,我试图显示2个表,这些表中的数据是我从另一个网站抓取的,并已放置在一个名为Product的对象中。 Product对象有2个类别,分别作为枚举存储,已注册和未注册。

问题

当我对Kaminari进行分页时出现问题。下面是一些演示问题的图片。

Before the problem

当我在“注册产品”表上单击“ 2”时,“未注册产品”表也将变为“ 2”

Problem

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

我的模型

 df<- df%>% mutate(dates = as.Date(ymd(dates)), days_prior =as.integer(days_prior))


 df<-df %>% mutate(dates =
   as.Date(ifelse(is.na(days_prior),dates,days_prior+lag(dates)),
   origin="1970-01-01"))

我的控制器

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 

我未注册产品的部分相同,将@registered_products替换为@未注册产品。

index.html.erb

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

我尝试过的事情

我在浏览Kaminari文档时发现,可以对数组进行分页。所以我尝试了。下面是修改后的文件。

控制器

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

其他所有相关文件都相同,只是替换为创建的新全局变量。问题仍然存在。

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

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

1 个答案:

答案 0 :(得分: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