1 つのビューで一緒に表示する必要がある 2 つのモデル (フォルダーとドキュメント) があります。ただし、送信されるクエリの数を減らすために、フォルダーが 12 未満 (my :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)
どうすれば解決できますか?