【问题标题】:rails autocomplete searchkickrails 自动完成 searchkick
【发布时间】:2016-05-06 03:08:59
【问题描述】:

我正在尝试使用 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"]

【问题讨论】:

  • 显示events_controllershow方法
  • 现在添加 Rails 控制台日志,当您点击此请求时看到的内容。
  • @ArupRakshit 我会添加它,但出于某种原因必须对其进行编辑
  • 您的路由是否正确?它根本不应该点击#show吗?检查 rake 路线?
  • @ArupRakshit 添加了编辑,rake 路由确实显示了这个autocomplete_events GET /events/autocomplete(.:format) events#autocomplete

标签: ruby-on-rails search autocomplete


【解决方案1】:

你能试试这个吗?

<%= form_tag autocomplete_events_path, ... %>

【讨论】:

  • 您能否检查您的 before_filters 以查看 find_event 或类似的东西是否不适用于#autocomplete?
  • 好吧,如果我删除了 search_events 标签,它就会完全停止搜索!
猜你喜欢
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 2015-04-22
  • 2011-12-23
  • 1970-01-01
  • 2014-12-18
  • 2019-06-26
  • 2023-03-06
相关资源
最近更新 更多