新手在这里,有执行使用Searchkick和事先键入的内容/警犬自动完成一些困难。
首先我有一个指数/欢迎主页在那里我有我的输入字段我的搜索框。这然后搜索了多个模型对不同的细胞和不同的细胞标记(这并不重要)的名字。
首先在我的路线文件,即时通讯不确定阉羊有我的自动完成“连接”到我的“欢迎”路线或我的“单元格格式”路线,我都试过,但似乎并没有发挥作用,目前它被设置因为这样:
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>
无功自动完成变量需要下面用于source:
(之前我没有意识到这一点)
仍然有困难的自动完成仍然没有工作,但我觉得我在进步