J'utilise will_paginate pour parcourir les enregistrements avec succès. J'utilise également la recherche en direct AJAX via jQuery pour mettre à jour mes résultats div. Pas de problème jusqu'à présent. Le problème que j'ai est lorsque vous essayez de paginer à travers ces résultats de recherche en direct. Je reçois simplement "La page est en cours de chargement ..." sans mise à jour div. Est-ce que je manque quelque chose de fondamental? Je crois que je pourrais avoir besoin de lier l'évènement click des liens de pagination via jQuery.Utilisation de will_paginate avec AJAX live search avec jQuery dans Rails
# index.html.erb
<form id="searchform" accept-charset="utf-8" method="get" action="/search">
Search: <input id="search" name="search" type="text" autocomplete="off" title="Search location, company, description..." />
<%= image_tag("spinner.gif", :id => "spinner", :style =>"display: none;") %>
</form>
# JobsController#search
def search
if params[:search].nil?
@jobs = Job.paginate :page => params[:page], :order => "created_at desc"
elsif params[:search] and request.xhr?
@jobs = Job.search params[:search], params[:page]
end
render :partial => "jobs", :layout => false, :locals => { :jobs => @jobs }
end
# Job#search
def self.search(search, page)
logger.debug "Job.paginate #{search}, #{page}"
paginate :per_page => @@per_page, :page => page,
:conditions => ["description LIKE ? or title LIKE ? or company LIKE ?",
"%#{search}%", "%#{search}%", "%#{search}%"],
:order => 'created_at DESC'
end
# search.js
$(document).ready(function(){
$("#search").keyup(function() {
$("#spinner").show(); // show the spinner
var form = $(this).parents("form"); // grab the form wrapping the search bar.
var url = form.attr("action"); // grab the URL from the form's action value.
var formData = form.serialize(); // grab the data in the form
$.get(url, formData, function(html) { // perform an AJAX get, the trailing function is what happens on successful get.
$("#spinner").hide(); // hide the spinner
$("#jobs").html(html); // replace the "results" div with the result of action taken
});
});
});
Aussi, juste curieux de savoir pourquoi vous ne disposez pas d'un retard dans la fonction keyup? Typiquement, vous voulez que la recherche en direct attende que l'utilisateur fasse une pause de quelques centaines de millisecondes avant de lancer le get, non? –