1

我正在使用searchkick gem进行弹性搜索,typeahead用于自动完成。我有一个类似位置,城市,store_name等列的模型商店。我想在自动完成下拉列表中显示位置和城市。我模型代码是自动完成结果显示未定义Typeahead在Rails中

class Store < ActiveRecord::Base 
    searchkick autocomplete: ['location','city'], 
     suggest: ['location','city'] 
    attr_accessible :city, :location, :name, :pincode 
end 

我的控制器是

class StoresController < ApplicationController 
    # GET /stores 
    # GET /stores.json 
    def index 
    if params[:query].present? 
     @stores = Store.search(params[:query],fields: [:location,:city]) 
    else 
     @stores = Store.all 
    end 
    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @stores } 
    end 
    end 

    def autocomplete 
     render json: Store.search(params[:query], autocomplete: true,fields: [:location,:city], limit: 10).map {|store| 
    {location: "#{store.location} , #{store.city}"}} 
    end 
end 

我的视图代码是

<%= form_tag stores_path, class: "form-inline", method: :get do %> 
    <div class="input-group input-group-lg"> 
     <% if params[:query].present? %> 
      <div class="input-group-btn"> 
       <%= link_to "clear", stores_path, class: "btn btn-default" %> 
      </div> 
     <% end %> 
     <%= text_field_tag :query, params[:query], class: "form-control typeahead", id: "store_search", autocomplete: "off" %> 
      <div class="input-group-btn"> 
       <%= submit_tag "Search", class: "btn btn-primary" %> 
      </div> 
     </div> 
<% end %> 

我store.js.coffee

$ -> 
    $('#store_search').typeahead 
     name: "store", 
     displayKey: 'location', 
     remote: "/stores/autocomplete?query=%QUERY" 

当我搜索,返回的结果就像 [{ “位置”: “RT纳加,班加罗尔”},{ “位置”: “RT纳加,班加罗尔” },{“location”:“RT Nagar,Kolkata”}]

我想在自动完成下拉列表中显示结果。请告诉我如何编写搜索以获得确切结果。

回答

1

我解决这个另一种方式,现在我的控制器代码看起来像

def autocomplete 
    render json: Store.search(params[:query], autocomplete: true,fields: [:location,:city], limit: 10).map {|store| 
    "#{store.location},#{store.city}"} 
end 

和搜索是由

def index 
    if params[:query].present? 
    @location,@city = params[:query].split(',') 
    @stores = Store.search(@location,where: {city: @city},fields: [:location,:city]) 
    else 
    @stores = Store.all 
    end 
    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @stores } 
    end 
end 

做现在,我得到的结果在下拉菜单中,并同时获得搜索results.Thank如果有其他建议,请写信给大家。