无限滚动轨道ajax请求触发,但不显示下一个分页页面

我有一个rails应用程序,我正在使用will_paginate 。 然后我使用will_paginate作为无限滚动的基础。 经过大量的试验和错误后,请求似乎正常,但是请求不是在应用程序中呈现下一页内容,而是重新呈现我的所有内容并再次以分页forms显示。 我有一个想法,就是我的部分我的.each迭代器,但我不确定。

下面是我的部分,控制器,js.erb,coffescript和日志。 如果有人可以帮助解释为什么这不能正常工作,我将不胜感激!

日志:您可以看到它正在获取下一页,并且它会针对每个请求的所有5个页面执行此操作:

 Started GET "/links?page=2&_=1451404304001" for ::1 at 2015-12-29 10:51:46 -0500 Processing by LinksController#index as JS Parameters: {"page"=>"2", "_"=>"1451404304001"} Link Load (0.2ms) SELECT "links".* FROM "links" LIMIT 5 OFFSET 5 (0.1ms) SELECT COUNT(*) FROM "links" Link Load (0.2ms) SELECT "links".* FROM "links" ORDER BY "links"."cached_votes_score" DESC LIMIT 5 OFFSET 5 CACHE (0.0ms) SELECT COUNT(*) FROM "links" 

_link.html.erb:

    

index.js.erb的:

 $('#links').append('');  $('.pagination').replaceWith('');  $('.pagination').remove();  

link.js.coffee:

 jQuery -> $(window).scroll -> if $(window).scrollTop() > $(document).height() - $(window).height() - 50 $.getScript($('.pagination a.next_page').attr('href')) 

links_controller.rb索引动作:

 class LinksController < ApplicationController before_filter :authenticate_user!, except: [:index, :show] def index @links = Link.order(cached_votes_score: :desc).paginate(page: params[:page], per_page: 5) respond_to do |format| format.js format.html end end end 

index.html.erb:

 

当我将index.js.erb更改为Miles在第一个注释中建议的更改时,我现在得到以下未定义的方法错误:

 ActionView::Template::Error (undefined method `total_pages' for 3:Fixnum): 1: $('#links').append(''); 2:  3: $('.pagination').replaceWith(''); 4:  5: $('.pagination').remove(); 6:  

 <% @links.order(cached_votes_score: :desc).each do |link| %> 

您不需要这样做,因为您正在渲染一组ActiveRecord模型:

 $('#links').append('<%= j render(@links) %>'); 

Rails将遍历链接并为每个链接呈现app/links/_link.html.erb部分。 所以这部分应该只包含显示一个不同链接的HTML。 你可以在里面使用link变量。

也尝试不在视图中使用order ,但在控制器操作中这样做。 将实例变量传递给视图时,应该可以使用它,而无需其他查询。 最好将所有查询和逻辑保留在控制器和模型中,不要将它们混合到视图中。