我对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
...
渲染它给了我分页链接但没有名字。
答案 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