我在Rails 4应用程序中使用Kaminari和AJAX。到目前为止,我已经能够为第一页显示不同数量的记录(13),然后在每个页面的14条记录中显示AJAX。这或多或少完美无缺。
但是,只要我将第一页的记录数设置为更大的数字(例如27),kaminari就会开始加载已经显示在第27页的重复数据。
在我的开发应用程序中,我总共只有30条记录。第一页确实显示27,第2页应仅显示3,但最终显示第一页的14个副本,然后在另一页上显示最后3个。
有谁知道它为什么会重复加载而不只是显示第2页的最后3个?
PagesController.rb >索引
@dabbles = Dabble.where(:completed_upload => true, :sketch => false).order('created_at DESC')
@dabbles = Kaminari.paginate_array(@dabbles)
@page = (params[:page] || '1').to_i
if @page == 1
@dabbles = @dabbles.page(params[:page]).per(27)
else
@dabbles = @dabbles.page(params[:page]).per(14)
end
respond_to do |format|
format.html
format.js
format.json
end
index.html.erb
<div class="grid" id="fresh">
<%= render :partial => 'pages/hexagons', :locals => { :dabbles => @dabbles, :count => 1 } %>
</div>
<div id="corrections" style="display: inline;">
<!-- irrelevant. -->
</div>
<div id="paginator">
<%= link_to_next_page @dabbles, 'Load More', :remote=>true %>
</div>
index.js.erb的
$('#fresh').append("<%= escape_javascript render :partial => 'pages/hexagons', :locals => { :dabbles => @dabbles, :count => 0 } %>");
$('#corrections').append("<%= escape_javascript render :partial => 'pages/corrections', :locals => { :correction => correct_helper(@dabbles.size) } %>");
$('#paginator').html("<%= escape_javascript(link_to_next_page @dabbles, 'Load More', :remote=>true) %>");
答案 0 :(得分:0)
我认为Kaminari使用.per方法检测per_page项目计数,当你第一次调用.per(27)时,你得到前27个元素。在第二页上你会得到15..28个元素(不是27..41)。
试试这种方式
@paginated_dabbles = Kaminari.paginate_array(@dabbles[27..-1])
@page = (params[:page] || '1').to_i
if @page == 1
@dabbles[0...27]
else
@paginated_dabbles = @dabbles.page(params[:page]).per(14)
end