Paginate AJAX解决方案不会在Rails上工作吗?

时间:2018-04-04 14:03:11

标签: ruby-on-rails ajax pagination

所以,我已经按照标准答案在我的rails网站上应用了paginate WITH AJAX,但它似乎没有起作用。如果我单击以转到下一组部分,则页面不会更改。我看到了请求,但页面内容是相同的。

//Here is my code below:
//Views
#container.baseGrip
  = render :partial => 'student_search_pages/search_options'  

  #teachersList.full
    %span.noreselt.full 該当する先生はいません
    - @initial_users.each do |user|
      .profcard_wrapper.six
        = render :partial => "user_profile_cards/user_profile_card", :locals => {:user => user, :favorite_view => true}
  = render :partial => 'users/edit/sche_candidate'

= js_will_paginate @initial_users, :previous_label => "< b", :next_label => "n >", :class => "pagination full", :outer_window => 2, :params => params[:page]

这是我的控制器:

class StudentSearchPagesController < AuthenticatedController
  before_action :check_user_is_student!
  include StudentSearchPagesHelper
  include WillPaginateHelper
  def show
    @user          = current_user
    @student       = current_user.student
    @initial_users = StudentSearchPagesHelper.initial_teacher_search(@student).paginate(:page => params[:page], :per_page => 1)
    @favorites     = current_user.user_favorites
    @referer       = request.referer
  end
end

最后,这是我的帮手:

module WillPaginateHelper
  class WillPaginateJSLinkRenderer < WillPaginate::ActionView::LinkRenderer
    def prepare(collection, options, template)
      options[:params] ||= {}
      options[:params]['_'] = nil
      super(collection, options, template)
    end

    protected
    def link(text, target, attributes = {})
      if target.is_a? Fixnum
        attributes[:rel] = rel_value(target)
        target = url(target)
      end

      @template.link_to(target, attributes.merge(remote: true)) do
        text.to_s.html_safe
      end
    end
  end

  def js_will_paginate(collection, options = {})
    will_paginate(collection, options.merge(:renderer => WillPaginateHelper::WillPaginateJSLinkRenderer))
  end
end

此外,这是我点击下一步时显示的请求:

Started GET "/student/search?page=2" for ::1 at 2018-04-04 10:09:13 -0400
Processing by StudentSearchPagesController#show as JS
  Parameters: {"page"=>"2"}
...
 Rendered users/edit/_time.haml (284.7ms)
  Rendered user_profile_cards/_teacher_card.haml (456.3ms)
  Rendered user_profile_cards/_user_profile_card.haml (542.3ms)
  Subject Load (1.0ms)  SELECT  `subjects`.* FROM `subjects`  ORDER BY `subjects`.`id` ASC LIMIT 1000
  Rendered users/edit/_sche_candidate.haml (8.0ms)
  Matching Load (0.7ms)  SELECT `matchings`.* FROM `matchings` WHERE `matchings`.`student_id` = 2
  Rendered student_search_pages/show.haml (1223.8ms)

1 个答案:

答案 0 :(得分:0)

我使用的这个帮手很完美:

module WillPaginateHelper
  class WillPaginateAjaxLinkRenderer < WillPaginate::ActionView::LinkRenderer
    def prepare(collection, options, template)
      options[:params] ||= {}
      options[:params]["_"] = nil
      super(collection, options, template)
    end

    protected
    def link(text, target, attributes = {})
      if target.is_a? Fixnum
        attributes[:rel] = rel_value(target)
        target = url(target)
      end
      target = target.sub('/data', "") if Rails.env == "production" 
      ajax_call = "$.ajax({url: '#{target}', dataType: 'script'});return false;"
      @template.link_to(text.to_s.html_safe,"#", onclick: ajax_call)
    end
  end

  def ajax_will_paginate(collection, options = {})
    will_paginate(collection, options.merge(:renderer => WillPaginateHelper::WillPaginateAjaxLinkRenderer))
  end
end