【问题标题】:How to implement Ajax with will_paginate gem on Ruby on Rails如何在 Ruby on Rails 上使用 will_paginate gem 实现 Ajax
【发布时间】:2019-01-30 02:11:48
【问题描述】:

我想在我的 ruby​​ on rails 项目上实现 Ajax。我目前使用 will_paginate gem。每当我单击下一页时,整个页面都会重新加载,这是我不希望发生的。我怎样才能防止这种情况?我找到了similar question,但它对我不起作用。我猜是因为我使用的是 Rails 5.2.2?我不确定。

我的 index.html.erb 看起来像这样:

 <div class="row justify-content-center align-items-center">
       <div class="page_info">
        <h5><%= page_entries_info @imports %></h5>
       </div>
 </div>
 <div class="row justify-content-center align-items-center">
       <div class="page_info">
        <h5><%= will_paginate @imports, :container => false %></h5>
       </div>
 </div>

这是我的 controller.rb 中的代码:

class ImportsController < ApplicationController
  def index
     @imports = Import.all
     @imports = Import.paginate(:page => params[:page], :per_page => 5)   
  end

【问题讨论】:

  • @nileshkumar 很遗憾,我没有为我工作,你能帮我解决这个问题吗?我正在使用 Rails 5.2.2
  • 控制器中的代码?你在用 jquery 吗?
  • @nileshkumar 我更新了问题,请参阅上面的控制器。另外,我目前没有使用 jquery,因为我以前从未尝试过。我刚开始学习 Rails。
  • 不确定这是否是一个选项,但我建议您尝试 Kaminari,从 will_paginate 切换非常简单,并且它具有 remote: true 选项。

标签: ruby-on-rails ajax pagination will-paginate


【解决方案1】:

要使用 AJAX 而非页面刷新进行分页,您需要将 data-remote="true" 添加到所有分页链接。

data-remote="true" 是一个 Rails 帮助器,它将导致服务器将请求解释为 JS 而不是 HTML。

第一步,新建助手:

module RemoteLinkPaginationHelper
  class LinkRenderer < WillPaginate::ActionView::LinkRenderer
    def link(text, target, attributes = {})
      attributes['data-remote'] = true
      super
    end
  end
end

其次,在application_helper中添加paginate方法。

module ApplicationHelper
  def paginate(collection, params= {})
    will_paginate collection, params.merge(:renderer => RemoteLinkPaginationHelper::LinkRenderer)
  end
end

然后,你可以替换这个:

<div class="row justify-content-center align-items-center">
  <div class="page_info">
    <h5><%= will_paginate @imports, :container => false %></h5>
  </div>
</div>

用这个:

<div class="row justify-content-center align-items-center">
  <div class="page_info">
    <h5><%= paginate @imports, :container => false %></h5>
  </div>
</div>

我从这个 GitHub Snippet 获得了这些步骤:https://gist.github.com/jeroenr/3142686

【讨论】:

  • 嗨@Noah,我关注了这个,但是当我点击“下一步”时它似乎没有转到下一页。
  • 为了清楚起见,为了创建一个新的助手(如步骤 1 所述),我首先需要生成一个名为“RemoteLinkPagination”的新控制器,对吗?对于这个非常基本的问题,我很抱歉,但我还是 Rails 的新手
  • 它似乎在 Rails 5 上不起作用。你碰巧知道这个的解决方法吗?
  • 您在 Rails 5 上遇到错误吗?什么似乎不起作用?如果您查看服务器日志,单击分页按钮时是否有任何请求进入?
  • 当我点击“下一步”或在另一个页面上时,它没有显示任何错误,但它停留在同一页面上。服务器日志显示请求进来了,但它没有呈现在页面上。
猜你喜欢
  • 2012-11-17
  • 2021-06-11
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2012-11-27
  • 1970-01-01
  • 2011-03-13
相关资源
最近更新 更多