繁体   English   中英

Rails自动完成搜索

[英]rails autocomplete searchkick

我正在尝试使用typeahead.js自动完成

这就是我目前所拥有的。

这是在我的控制器中。

  def autocomplete
    render json: Event.search(params[:query], autocomplete: true, limit: 10).map(&:eventname)
  end

这是我的路线

resources :events do
      collection do
        get :autocomplete
      end
    end

如果我使用Rails控制台并执行此操作

Event.search("searchquery", autocomplete: true).map(&:eventname)

我确实得到了预期的答复,

然而

如果我在网站上使用普通的搜索框进行搜索,则会出现此错误

ActiveRecord::RecordNotFound (Couldn't find Event with 'id'=autocomplete):
  app/controllers/events_controller.rb:50:in `show'

在节目的第50行(在其他地方使用)是这个

@event = Event.find(params[:id])

这是我的看法

    <div class="col-md-12" align="center" style="padding-top: 1%">
      <%= javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/typeahead.js/0.9.3/ typeahead.min.js" %>
    <h1><%= image_tag("Logo.png", :class => "logo", :style => "background-color: rgba(0, 0, 0, 0.8); border-radius: 50px") %></h1>
    <%= form_tag search_events_path, class: "form-inline form-wrapper", method: :get do %>
        <%= text_field_tag :search, params[:search], placeholder: "What are you looking for?", class: "search-module-input-text", id: "search", autocomplete: "off" %>
          <%= submit_tag "Search", id: "submit" %>
      </div>

我试图按照本教程

https://shellycloud.com/blog/2013/10/adding-search-and-autocomplete-to-a-rails-app-with-elasticsearch

我只能像上面看到的那样添加搜索代码

任何帮助都很好!!!

山姆

编辑

这是控制器的显示部分和搜索部分

  def search
    @events = Event.search params[:search], suggest: true, partial: true, misspellings: {distance: 4}
    if @events.results.any?
      render 'events/results'
    else
      render 'events/noresults'
    end
  end

  def show
    @event = Event.find(params[:id])
    @stubby = stub_auth_token
  end

滑轨控制台

curl http://localhost:9200/events_development/_search?pretty -d '{"query":{"multi_match":{"fields":["eventname.autocomplete"],"query":"response","analyzer":"searchkick_autocomplete_search"}},"size":1000,"from":0,"fields":[]}'
  Event Load (3.5ms)  SELECT "events".* FROM "events" WHERE "events"."id" IN (23419, 23420, 16330, 16329, 13660)
 => ["reponse1", "reponse2", "reponse3", "reponse4", "reponse5"]

你可以试试这个吗?

<%= form_tag autocomplete_events_path, ... %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM