分页阵列不会显示

时间:2015-12-02 20:07:13

标签: ruby-on-rails-4 views kaminari

我对Ruby on Rails很陌生,所以会很感激一些帮助

角色在我的应用程序中有用户。 在显示角色时,我想呈现一个分页的用户名列表(以及作为进一步的重构 - 链接到用户)。 目前我的HAML模板如下

...

  %ul.assigned-users
    - if @role.users.present?
      - names = @role.users.collect {|u|  u.name}
      - links = Kaminari.paginate_array(names).page(params[:page]).per(20)
      = paginate links
    - else
      %p No users have this role assigned

...

渲染它给了我分页链接但没有名字。

1 个答案:

答案 0 :(得分:0)

Kaminari' paginate_array方法未显示数组中的值。

执行此操作的最佳方法是从数据库中获取分页查询。代码中的Kaminari.paginate_array从数据库中获取整个用户数组,然后对其进行分页,这非常低效且占用内存。

您需要将逻辑添加到控制器。如果您对@role.users查询进行了分页,则会生成LIMIT,这是您在per方法中分配的值,OFFSET等于(params[:page] - 1) * per。这只会从数据库中获取所需的记录数。

在您的控制器中app/controllers/roles_controller.rb

class ConversationsController < ApplicationController
  def show
   @role = Role.find params[:id]
   @users = @role.users.page(params[:page]).per(20)
  end
end

在您的观看中app/views/roles/show.html.haml

%ul.assigned-users
  - if @users.present?
    - @users.each do |u|
      %li=u.name
    = paginate @users
  - else
    %p No users have this role assigned