Pytanie Jak uzyskać dostęp do funkcji autouzupełniania Jquery UI w Rails 4?


Używam Rails 4.0.2 z jquery-rails (3.1.0) i jquery-ui-rails (4.1.1). Próbuję dodać autouzupełnienie do formularza wyszukiwania (przy użyciu Bootstrap 3.1.0):

<%= form_tag products_path, method: :get, class: 'navbar-form navbar-left' do %>
   <div class='form-group'>
     <%= text_field_tag :query, params[:query], id: "navbar-search-input", class: 'form-control', placeholder: 'Product name.....' %>
   </div>
   <%= button_tag(type: 'submit', id: 'navbar-search-btn', class: 'btn btn-default') do %>
     <i class='fa fa-search fa-fw'></i> Search
   <% end %>  
<% end %>

Oto moje pliki aplikacji JS i CSS:

application.js

//= require jquery
//= require jquery_ujs
//= require jquery.ui.autocomplete
//= require turbolinks
//= require_tree .

var ready;
ready = (function() {
  $('a[href="' + this.location.pathname + '"]').parent().addClass('active');
  $("#navbar-search-input").autocomplete({
    source: '/products/autocomplete.json',
  });
});

$(document).ready(ready);
$(document).on('page:load', ready);

application.css.scss

*= require bootstrap
*= font-kit-rails/ubuntu
*= require jquery.ui.autocomplete
*= require_self
*= require_tree .

Niż mój kontroler i trasa do autouzupełniania:

class ProductsController < ApplicationController

  def autocomplete
    @products = Product.order(:name)
    respond_to do |format|
      format.html
      format.json { 
        render json: @products.where("name ILIKE ?", "%#{params[:q]}%")
      }
    end
  end

routes.rb

  resources :products do
    collection do
      get 'autocomplete'
    end
  end

Teraz wszystko to, mój plik json z wszystkimi moimi produktami na /products/autocomplete.json są tam. Problem polega na tym, że jeśli wpiszesz cokolwiek, wyświetli się puste pole, a jeśli kliknę dowolny obszar menu, zresetuje pole formularza wyszukiwania. Czy wiesz, jak zmusić to do działania?

EDYTOWAĆ

UWAGA: Mam produkt o nazwie Ryż

Started GET "/products/autocomplete.json?term=ric" for 127.0.0.1 at 2014-03-19 10:06:51 -0400
Processing by ProductsController#autocomplete as JSON
  Parameters: {"term"=>"ric"}
  Product Load (0.9ms)  SELECT "products".* FROM "products" WHERE (name ILIKE '%%') ORDER BY "products"."name" ASC
Completed 200 OK in 16ms (Views: 14.3ms | ActiveRecord: 0.9ms | Search: 0.0ms)

11
2018-03-19 13:37


pochodzenie


Czy masz jakieś błędy JS w konsoli? - tirdadc
@tirdadc Nie ma błędów, ale moje żądanie GET nie zwraca niczego. Spójrz na moją edycję. - user2784630


Odpowiedzi:


  def autocomplete
    @products = Product.order(:name).where("name LIKE ?", "%#{params[:term]}%")
    respond_to do |format|
      format.html
      format.json { 
        render json: @products.map(&:name).to_json
      }
    end
  end

6
2018-03-20 02:40



Co to jest params [: term] w tym kodzie? - indb
@Name J J my Moje ograniczone zrozumienie - po wpisaniu czegoś w polu autouzupełniania jest przekazywane do kontrolera jako parametry [: termin], które są następnie używane do wyszukiwania produktów i zwracania tych danych do funkcji wywołania zwrotnego w celu przetworzenia. - BKSpurgeon


Sądząc po twojej notatce, wygląda na to, że nie pobierasz poprawnie parametrów w kontrolerze, więc spróbuj:

render json: @products.where("name ILIKE ?", "%#{params[:term]}%")


3
2018-03-19 15:37



Dang, wciąż mam takie same wyniki. - user2784630