rails 中两个独立模型的分页

Pagination for two separate model in rails

我的数据库模式就是这样 活动

has_many :ads
has_many :surverys

调查和广告彼此没有关系。

对于带分页的列表,我这样做

@ads = Ad.all.page(params[:page]).per(8)
@surveys = Survey.all.page(params[:page]).per(8)

我的要求是同时获取广告和调查的列表。

我必须同时得到两个

@ad_and_surveys = 

我如何获取并对其进行分页?

您必须使用两个不同的参数同时对两个不同的表格进行分页:

例如:

控制器:

@ads = Ad.all.page(params[:ads_page]).per(8)
@surveys = Survey.all.page(params[:surveys_page]).per(8)

查看:

<%= will_paginate @ads, param_name: :ads_page %>
<%= will_paginate @surveys, param_name: :surveys_page %>

你可以像下面那样做:

@ads = Ad.all
@surveys = Survey.all
sorted_array_of_ads_and_surveys = (@ads.to_a + @surveys.to_a).sort_by { |k| k["created_at"] }
@desired_output = sorted_array_of_ads_and_surveys.page(params[:page]).per(8)

sorted_array_of_ads_and_surveys 是经过排序的@ads 和@surveys 的组合。所以你得到了广告和调查的组合。否则先上广告后调查效果不佳。

您可以使用 will_paginate/array!

创建文件 config/initializers/will_paginate_array_fix.rb 并添加:

require 'will_paginate/array'

在您的控制器上:

def show
  @ad_surveys = Ad.all + Survey.all # or what ever you have
  @ad_and_survey = @ad_surveys.paginate(page: params[:page], per_page: 5)
end

正在查看:

<%= will_paginate @ad_and_survey %>