【发布时间】:2015-09-30 22:43:19
【问题描述】:
我正在使用 searchkick gem 进行弹性搜索,预先输入以进行自动完成。我有一个模型商店,其中包含位置、城市、商店名称等列。我想在自动完成下拉列表中显示位置和城市。我的模型代码是
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"
当我搜索时,它会返回类似的结果 [{"location":"RT Nagar , 班加罗尔"},{"location":"RT Nagar , 班加罗尔"},{"location":"RT Nagar , 加尔各答"}]
我想在自动完成下拉列表中显示结果。请建议我应该如何编写搜索以获得准确的结果。
【问题讨论】:
标签: jquery ruby-on-rails elasticsearch autocomplete typeahead.js