我有两个模型(文件夹和文档)需要在一个视图中一起显示。但是,为了减少发送的查询数量,我仅在文件夹少于 12 个(我的:per_page
)时才收集文档。虽然这工作正常,但我被困在一个特殊情况下,
当我的文档总数少于 12 个且文件夹少于 12 个但加起来超过 12 个时,分页失败。
下面是计算要显示哪个页面的代码,该页面f_page
返回文件夹分页的页面并d_page
返回文档集合的页码。
def f_page(page_cnt, size)
page_cnt.present? and size.nonzero? ? page_cnt.to_i <= (size/12 + (size%12==0 ? 0 : 1)) ? page_cnt.to_i : (size / 12 ) + (size%12==0 ? 0 : 1) : 1
end
def d_page(page_cnt, fc, dc)
page_cnt = page_cnt.present? ? page_cnt : 1
puts page_cnt
dpg = 1
if (fc/12+1 == page_cnt.to_i)
dpg = 1
elsif ((fc/12+1) < page_cnt.to_i)
if (fc < 12)
unless (dc <= 12)
dpg = page_cnt
else
dpg = 1
end
else
(fc/12 == 0) ? (dpg = page_cnt.to_i - (fc/12+1)) : (dpg = page_cnt.to_i - (fc/12))
end
end
puts "dpg = #{dpg}"
return dpg
end
两者都一起收集和分页,这在视图中显示。
f = Folder.action_folder_collection(@action, current_user).paginate(:page => params[:page], :per_page => 12)
if (f.count < 12)
d = Document.action_document_collection(@action, current_user).paginate(:page => d_page(params[:page], total_folders, total_documents), :per_page => per_page-f.count)
end
collection << f
collection << d
@collection = collection.flatten.paginate(:page => 1,:per_page => 12,:total_entries => total)
我该如何解决?