【问题标题】:Kaminari, pagination, AJAX strange behaviourKaminari,分页,AJAX奇怪的行为
【发布时间】:2015-09-04 12:08:15
【问题描述】:

我设法让我的 AJAX 页面加载工作,但我遇到了一些我不知道如何解决的问题:我将每页的条目数设置为 4。在第一页上它加载了 4 个项目,但在下一页页面,它加载超过 4 个项目。这是为什么呢?

直播网站:https://serene-waters-1174.herokuapp.com/

我检查了日志,发现OFFSET 在每次加载 ajax 后都没有保持一致。 ON 页面加载 OFFSET 用于,如我所愿,在后续加载中,OFFSET0

Started GET "/users/index?page=2" for ::1 at 2015-06-18 21:17:29 +0200
Processing by UsersController#index as JS
  Parameters: {"page"=>"2"}
  User Load (1.0ms)  SELECT  "users".* FROM "users"  ORDER BY "users"."name" ASC LIMIT 4 OFFSET 4
  Rendered users/_user.html.erb (0.3ms)
   (0.2ms)  SELECT COUNT(*) FROM "users"
  Rendered users/index.js.erb (35.3ms)
Completed 200 OK in 45ms (Views: 42.5ms | ActiveRecord: 1.1ms)


Started GET "/users/index" for ::1 at 2015-06-18 21:17:34 +0200
Processing by UsersController#index as JS
  User Load (0.8ms)  SELECT  "users".* FROM "users"  ORDER BY "users"."name" ASC LIMIT 4 OFFSET 0
  Rendered users/_user.html.erb (0.9ms)
   (0.2ms)  SELECT COUNT(*) FROM "users"
  Rendered users/index.js.erb (48.3ms)
Completed 200 OK in 59ms (Views: 57.1ms | ActiveRecord: 1.0ms)

user.rb

class User < ActiveRecord::Base
      paginates_per 4
end

user_controller.rb

class UsersController < ApplicationController
  def index
    @users = User.order(:name).page params[:page]

    respond_to do |format|
        format.html
        format.js {}
    end
  end

  def show
    @user = User.find(params[:id])
  end
end

index.html.erb

<h1>All users in database.</h1>

<div id="paginator">
    <%= paginate @users, :remote => true %>
</div><br>

<div id="list">
    <%= render 'user' %>
</div>

index.js.erb

$('#list').html('<%= escape_javascript render(@users) %>');
$('#paginator').html('<%= escape_javascript(paginate(@users, :remote => true).to_s) %>');

我会感谢一些帮助,让我的“下一个”链接使用 ajax 加载页面。

编辑: 我从页面源代码中意识到,没有所有页面只显示 4 个项目。完美的。但在视图中,它显示了 4 个项目,并且将相同的项目重复了 4 次。

编辑:

这在部分修复它。我之前在部分上使用了.each 循环。

<%= "Name: #{user.name}" %> <br>
<%= "Email: #{user.email}" %><br>
<%= "Album: #{user.album}" %>
<p>======</p>

感谢smathy

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax pagination


    【解决方案1】:

    OFFSETparams[:page] 管理 - 正如您在日志中看到的那样,:page 参数未在第二个请求中发送。

    但是,这些都不能解释为什么一个页面上显示的用户超过 4 个,两个 SQL 查询都显示正确的LIMIT 4,所以也许你的 JS 中有另一个错误来更新 DOM 或者你的用户部分它正在添加用户而不是替换它们。

    【讨论】:

      【解决方案2】:

      对我有用的是将部分保留为 .each 循环,但更改我的 js.erb 文件以呈现部分而不是实例变量。

      $('#certs').html('<%= escape_javascript render "certifications/certification" %>');
      

      【讨论】:

        猜你喜欢
        • 2011-07-06
        • 2011-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        • 2015-05-13
        相关资源
        最近更新 更多