Rails 4:Kaminari - 显示重复项

时间:2014-05-19 18:04:01

标签: ruby-on-rails ruby-on-rails-4 pagination kaminari

我在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) %>");

1 个答案:

答案 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