无限滚动轨道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:
Upvote Downvote
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
,但在控制器操作中这样做。 将实例变量传递给视图时,应该可以使用它,而无需其他查询。 最好将所有查询和逻辑保留在控制器和模型中,不要将它们混合到视图中。