I am using will_paginate
gem in my ROR
project to show the records in pages.
I want the next page to be loaded without reloading the whole page using ajax
.
I found some examples on the net but they don't work for me.
How to do this?
I am using will_paginate
gem in my ROR
project to show the records in pages.
I want the next page to be loaded without reloading the whole page using ajax
.
I found some examples on the net but they don't work for me.
How to do this?
To follow on from @Pierre's excellent answer re creating a helper, I've seen some follow up questions regarding updating the views (a problem I initially had). @Pierre follows up with that problem by stating that you need to create a js response. Here's what I did after creating the helper:
in my show.html.erb
I created another file called show.js.erb (so two formats for show)
Additional to previous answer.
string of code:
replace with string:
The onclick event applied only to the elements that already exist. So, for new appears links, need delegate click event from parent ".sort_paginate_ajax" to childs ".pagination a".
You could just use JQuery:
Controller:
Then in index.html.erb:
In partial '_post_content.html.erb':
pagination.js:
index.js.erb:
Make sure to add the
again in your JS template (index.js.erb), so it sets the links data-remote again when the Ajax runs.
Create a new helper (ex. app/helpers/will_paginate_helper.rb) with the following content:
Then in your view use this tag for ajax pagination:
Remember that the pagination links will include existing params of the url, you can exclude these as shown below. This is standard will paginate functionality:
Hope that solves your problem.
Update 1: Added a explanation of how this works to the original question where I posted this solution.
Update 2: I've made it Rails 4 compatible with remote: true links and renamed the helper method to js_will_paginate.
Hey if you want to paginate products then try this:
app/controllers/products_controller.rb
views/products/index.html.erb
views/products/_products.html.erb
views/products/index.js.erb
assets/javascripts/application.js
So first we are calling paginate method on Product for all products, here an offset will be set according to
params[:page]
and limit will be set byper_page
options. Also we are renderingproducts
partial which will be rendered every time when other page is opened.In partial call on
@products
that you want, and thenwill_paginate
method is applied on@products
, it also createsparams[:page]
that is used in controller.Now in response to ajax request render content of
div
having classsort_paginate_ajax
with the partial that we created.Also to make request ajax request, on document load capture script of all
a
tags indiv.sort_paginate_ajax
, and return false.Now pages will be called with ajax request
I hope this would help you.