【问题标题】:2 paginated lists on 1 page (Rails)1 页上有 2 个分页列表(Rails)
【发布时间】:2016-02-16 14:59:39
【问题描述】:

我在 rails 应用程序中有一个页面,其中包含 2 个部分和 2 个分页列表(使用 AJAX)。

我的控制器:

  def show
    @movies = @movies.paginate(page: params[:page], per_page: 5)
    @books = @books.paginate(page: params[:page], per_page: 5)
  end

我的观点(show.html.haml):

.row
  .col-md-6.movies-table
    = render partial: 'movies'
  .col-md-6.books-table
    = render partial: 'books'

:javascript
  $(function() {
    $(".movies-table").on("click", '.pagination a', function(){
      $.get(this.href, null, null, "script");
      return false;
    });
  });

  $(function() {
    $(".books-table").on("click", '.pagination a', function(){
      $.get(this.href, null, null, "script");
      return false;
    });
  });

显示.js.erb:

$(".movies-table").html("<%= escape_javascript(render("nodes")) %>");
$(".books-table").html("<%= escape_javascript(render("edges")) %>");

问题:列表以某种方式连接(当我单击电影的下一页时,书籍的下一页也正在加载)。我希望分页为这些列表单独工作。

【问题讨论】:

  • 你用的是 kaminari 对吧?

标签: jquery ruby-on-rails ajax pagination


【解决方案1】:

没错,快速浏览一下docs 建议您可以在控制器中执行此操作;有明确的分页方法。

class FooController
  def show
    paginate_movies
    paginate_books    
  end

  def paginate_movies
    @movies = @movies.paginate(page: params[:page], per_page: 5)
  end

  def paginate_books
    @books = @books.paginate(page: params[:page], per_page: 5)
  end
end

然后在你的视图中你可以将控制器和方法参数传递给will_paginate

<%= will_paginate @movies, params: { controller: "foo", action: "paginate_movies" } %>
<%= will_paginate @books, params: { controller: "foo", action: "paginate_books" } %>

【讨论】:

  • 是否可以仅重命名 params[:page]?例如 params[:page_1] & params[:page_2]?
  • 是的,但是您遇到的问题是,因为它使用的是 show 操作,所以无论如何它都会执行两个 sql 查询。你不会有你的问题,但是重命名分页参数意味着你仍然会做两个 sql 查询,不管你分页是什么。
  • 我创建了 2 条新路线,但显示“缺少模板”
  • 你需要拆分你的show.js.erb,每个路由一个。
猜你喜欢
  • 1970-01-01
  • 2014-05-18
  • 2020-09-10
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2018-03-24
  • 2013-02-20
  • 2013-06-21
相关资源
最近更新 更多