将用多个表分页

我有以下表格:

  1. 用户
  2. 帐户(用户has_one帐户)
  3. 图片(用户has_many图片)

我想显示用户及其相关帐户和图片。 这是典型的N + 1查询问题,我使用预先加载解决了它。

User.includes(:account, :pictures).all 

我正在尝试使用will_paginate gem。 如何将这种渴望加载机制包含在will_paginate

我在这里找到了一个类似的问题: 将will_paginate与多个模型(Rails)一起使用 。 但答案中的链接不合适,答案本身已经过时了。 此外,它使用原始的SQL查询,我不喜欢。

我想要输出如下:

 user.name account.field1 account.field2 picture.count abc1 abcf1 abcf2 4 zxc zxcf1 zxcf2 7 

所以基本上当我做user.name ,它不会执行查询而只是从变量中获取数据; 当我执行user.account.field1它应该从变量中获取它而不执行查询。

paginate方法类似于all方法。 所以你可以这样做:

 User.includes(:account, :pictures).paginate( :page => params[:page], :per_page => 30) 

要么

 User.paginate(:include=> [:account, :pictures], :page => params[:page], :per_page => 30) 

注意:

will_paginate gem为Array类提供了一个方便的分页方法:

 [1,2,3,4].paginate(:page => 1, :per_page=>2) 

我最终在数组而不是gem本身上使用了分页。

  current_page = Integer(params[:page]||1) per_page = 250 @users_r = User.all(:conditions=>"some condition",:limit=>per_page,:offset=>per_page*(current_page-1),:include=>[:account,:user_info ,:pictures]) count = @users_r.length @users = WillPaginate::Collection.create(current_page, per_page, count) do |user| user.replace(@users_r) end @users.paginate(params)