Kaminari输出** n **个表,每个表有** n **行

时间:2013-04-19 09:57:50

标签: ruby-on-rails pagination kaminari

我是RoR的新手,所以我在这里遗漏了一些非常基本的东西,但我无法理解。我通过调用控制器来使用Kaminari gem在RoR应用程序中进行分页:

users_controller.rb:

def index
@users =  User.order('created_at DESC').page(params[:page])
end

在我看来,我有:

用户/ index.html.erb:

<%= paginate @users %>
<%= render @users %>

最后,我的用户部分是:

用户/ _user.html.erb

<% @users.each do |u| %>
(data output like <%= u.login %> and so on)
<%= end %>

因此它很简单,类似于Kaminari用法示例。但是,我收到具有指定行数的正确表,但该表呈现n次,其中n是paginates_per选项的数量。分页如果自己工作正常,但我无法调试那个问题,我做错了什么?

我在Kaminari之前使用了will_paginate gem并且开箱即用,所以我的应用程序并没有完全被破坏(如果它可能是这么简单的话)。

根据日志,所有内容都会呈现一次,因此@users对象包含相乘的数据。

2 个答案:

答案 0 :(得分:0)

<%= @users.each do |u| %>
(data output like <%= u.login %> and so on)
<%= end %>

<%=输出代码结果,而<%只执行它。用以下代码交换代码:

<% @users.each do |u| %>
(data output like <%= u.login %> and so on)
<% end %>

答案 1 :(得分:0)

这个问题的原因很简单,一个答案是在

中进行更改

用户/ index.html.erb:

从:

<%= paginate @users %>
<%= render @users %>

到:

<%= paginate @users %>
<%= render 'user' %> 

但是如果你(或者说我)想要渲染集合,我应该在我的部分

用户/ _user.html.erb:

  <tr>
    <td><%= user.id %></td>
    <td><%= user.login %></td>
    <td><%= user.email %></td>
    #(and so on...)
    <% end %>
  </tr>

只有那个(将从数据库中为每条记录调用的表的一部分)

所以现在index.html.erb看起来像这样:

用户/ index.html.erb

<table>
  <tr>
    <th>Id</th>
    <th>Name</th>
    #(and whatever you want)
  </tr>

  <%= render @users %>
</table>

现在表格将正确呈现。