ruby-on-rails - 具有多个属性的 Searchkick 自动完成功能
问题描述
新手在这里,使用 Searchkick 和 Typeahead/bloodhound 实现自动完成有些困难。
首先,我有一个索引/欢迎主页,其中有我的搜索框输入字段。然后在多个模型中搜索不同细胞的名称和不同的细胞标记(对此并不重要)。
首先在我的路由文件中,我不确定是否将我的自动完成“附加”到我的“欢迎”路由或“单元格”路由,我都尝试过,但似乎没有什么不同,目前它已设置像这样:
resources :cells do
collection do
match 'autocomplete' => 'welcome#autocomplete', via: [:get], as: :autocomplete
end
end
resources :welcome #index / home page
我的表单输入是:
<%= form_tag(@Search, :action => 'index', :method => "get", id: "search-form") do %>
<%= text_field_tag(:q, nil, placeholder: "Search...", class: "form-control rounded-left typeahead", autocomplete: "off") %>
<% end %>
我的模型如下:
searchkick text_start: [:name], callbacks: :async, suggest: [:name], word_start: [:name]
和我的控制器动作:
def autocomplete
render json: Cell.search(params[:q], {
fields: ["name^5"],
autocomplete: true,
limit: 5,
load: false,
misspellings: false
}).map(&:name)
end
最后是javascript:
<script src="typeahead.bundle.js"></script>
<script>
var Cells = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/welcome/autocomplete?query=%QUERY',
wildcard: '%QUERY'
}
});
$('#typeahead').typeahead(null, {
source: Cells
});
</script>
我想我对如何正确设置它感到非常困惑,我发现 Searchkick 文档很难推断出我的目的,因为我对这一切都很陌生:) 如果有人能够帮助或指出我一个好的指南(那不是岁)会很棒,因为我很确定我只是在兜圈子。这是实现自动完成的最佳方法还是有更好的方法来做到这一点?
感谢阅读,感谢您的帮助:)
解决方案
任何未来读者的快速更新:
我确定在路线中,您的自动完成代码必须指向具有您的自动完成方法的控制器,对我来说这是我的欢迎控制器。
resources :welcome do
collection do
match 'autocomplete' => 'welcome#autocomplete', via: [:get], as: :autocomplete
end
end
我对控制器中的自动完成方法感到满意,并对我需要当前的 javascript(目前在我的 html 中的标签中)感到满意
<script>
var autocomplete = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/welcome/autocomplete?q=%QUERY',
wildcard: '%QUERY'
}
});
$('#typeahead').typeahead(null, {
source: autocomplete
});
</script>
var autocomplete变量需要在下面使用source:
(我之前没有意识到这一点)
仍然有困难,因为自动完成仍然无法正常工作,但我认为我正在取得进展
推荐阅读
- ruby-on-rails - Quickbooks Online - 如何在 Ruby/Rails 中使用 intuit 实现 SSO
- javascript - 如何使用数据表仅对一列应用搜索过滤器
- c - 为什么 Valac 在 C 代码中生成这些(毫无意义?)临时指针
- actions-on-google - 谷歌助手可以用来创建社区活动日历吗
- java - 如何使用 JAXB 将列表编组为 XML 文件?
- javascript - 如何将带有数组的 JSON 对象导入 ajax 自动完成响应?
- bash - 需要在文件中连续打印当前的 CPU 使用率和内存使用率
- ruby-on-rails - Figaro 没有创建“application.yml”文件
- python - 如何在窗口中为 Tkinter 构建一个包,如 exe?
- php - PHP用自定义文本替换了一个标签不起作用