2

私はまだ Rails の学習者であり、ajax ライブ検索の実装に必死になっています。検索は送信では機能するようですが、キーアップでは機能しません。理由がわかりません...

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 %>

contact_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

contact.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>

また、application.jsを追加してみました

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

しかし、ライブ検索は入力しても開始されません...なぜですか?

4

1 に答える 1

1

この特定のケースでは、

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

連絡先コントローラーの index-Method からのブロック

于 2013-02-23T15:53:53.523 に答える