所以,我已经按照标准答案在我的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)
答案 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