Kaminari выводит **n** таблиц по **n** строк в каждой.

Я новичок в RoR, поэтому мне не хватает чего-то очень простого, но я не могу понять это. Я использую гем Kaminari для разбивки на страницы в приложении 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. Нумерация страниц работает нормально, но я не могу отладить эту проблему, что я делаю не так?

Я использовал гем will_paginate до Kaminari, и он отлично работал из коробки, поэтому мое приложение не полностью сломалось где-то глубже (если бы это могло быть в таком простом случае).

Судя по логам, все рендерится один раз, поэтому объект @users содержит умноженные данные.


person zrl3dx    schedule 19.04.2013    source источник


Ответы (2)


<%= @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 %>
person Mikhail Nikalyukin    schedule 19.04.2013
comment
Извините, я по ошибке вставил = в приведенный выше код, однако в моем реальном коде его нет, мой плохой. Я проверил, что происходит после того, как я поместил это в код: я получаю 2n таблиц, первая из которых отображается как чистый текст, а вторая - как обычный html, так что это все еще не причина. - person zrl3dx; 19.04.2013

Причина этой проблемы очень проста, один из ответов - внести изменения в

пользователи/index.html.erb:

от:

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

to:

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

Теперь таблица будет отображаться правильно.

person zrl3dx    schedule 23.04.2013