2013-02-22 4 views
2

Je suis toujours un Rails-Learner et j'essaie désespérément de mettre en œuvre une recherche en direct ajax. La recherche semble fonctionner sur la soumission, mais pas sur le clavier. Ne peut pas comprendre pourquoi ...rails 3.2 ajax recherche en direct

index.html.erb

<%= form_tag contacts_path, :method => 'get', :id => "contacts_search" do %> 
    <p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil %> 
    </p> 
    <div id="cresults_div"><%= render 'cresults' %></div> 
<% end %> 

<%= link_to 'New Contact', new_contact_path %> 

contacts_controller.rb

def index 
    @contacts = Contact.search(params[:search]) 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @contacts } 
    end 
    end 

index.js.erb

$("#cresults_div").html("<%= escape_javascript(render("cresults")) %>"); 

contact.rb

def self.search(search) 
     if search 
     where('last_name LIKE ?', "%#{search}%") 
     else 
     scoped 
     end 
    end 

contacts.js.coffee

jQuery -> 
    # Ajax search on submit 
    $('#contacts_search').submit(-> 
    $.get(this.action, $(this).serialize(), null, 'script') 
    false 
) 
    # Ajax search on keyup 
    $('#contacts_search input').keyup(-> 
    $.get($("#contacts_search").attr("action"), $("#contacts_search").serialize(), null, 'script') 
    false 
) 

_cresults.html.erb

<%= hidden_field_tag :direction, params[:direction] %> 
<%= hidden_field_tag :sort, params[:sort] %> 
<h1>Listing contacts</h1> 

<table> 
    <tr> 
    <th>Salutation</th> 
    <th>First name</th> 
    <th>Last name</th> 
    <th>Stree</th> 
    <th>Street no</th> 
    <th>Zip</th> 
    <th>City</th> 
    <th>State</th> 
    <th>Country</th> 
    <th>Phone</th> 
    <th>Email</th> 
    <th></th> 
    <th></th> 
    <th></th> 
    </tr> 

<% @contacts.each do |contact| %> 
    <tr> 
    <td><%= contact.salutation %></td> 
    <td><%= contact.first_name %></td> 
    <td><%= contact.last_name %></td> 
    <td><%= contact.stree %></td> 
    <td><%= contact.street_no %></td> 
    <td><%= contact.zip %></td> 
    <td><%= contact.city %></td> 
    <td><%= contact.state %></td> 
    <td><%= contact.country %></td> 
    <td><%= contact.phone %></td> 
    <td><%= contact.email %></td> 
    <td><%= link_to 'Show', contact %></td> 
    <td><%= link_to 'Edit', edit_contact_path(contact) %></td> 
    <td><%= link_to 'Destroy', contact, confirm: 'Are you sure?', method: :delete %></td> 
    </tr> 
<% end %> 
</table> 

aussi essayé de plus ajouter application.js

$(function() { 
    $("#contacts_search input").keyup(function() { 
    $.get($("#contacts_search").attr("action"), $("#contacts_search").serialize(), null, "script"); 
    return false; 
    }); 
}); 

Mais la recherche ne sera pas en direct commencez à taper ... pourquoi?

+0

Anything dans la console JS? –

+0

Essayez de remplacer le contenu sous $ ('# contacts_search input'). Keyup' avec $ ('# contacts_search'). Submit() '. –

+0

@DaveNewton: bon point, merci - 'Uncaught SyntaxError: jeton inattendu <' dans jquery.min.js: 13 - va essayer d'enquêter – BeeVee

Répondre

1

Dans ce cas particulier, je devais enlever le

respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @contacts } 
end 

Bloc de l'index méthode dans le contrôleur de contacts