【问题标题】:Typeahead duplicate records预先输入重复记录
【发布时间】:2018-04-04 09:30:39
【问题描述】:

我在我的 Rails 应用程序中使用 typeahead,如下所示:

<%= form_tag search_path, :method => "get", id: "search-form" do %>
  <%= text_field_tag :search, params[:search], id: "search" %>
  <%= submit_tag "Search" %>
<%end%>

<script>
var items = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.whitespace,
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
        url: '/items/autocomplete?search=%SEARCH',
        wildcard: '%SEARCH'
    }
});


$('#search')
    .typeahead(null, {source: items})
    .on('typeahead:selected', function(e){
        $("#search-form").submit();
    }).focus();
</script>

控制器动作:

def autocomplete
  render json: Item.search(params[:search], {
    fields: ["title"],
    match: :word_start,
    limit: 10,
    load: false,
    misspellings: {below: 5}
  }).map(&:title)
end

自动完成功能正常,但显示重复的结果。任何想法如何解决这个问题?

【问题讨论】:

  • @dbugger 感谢您的回复,我刚刚在我的问题中添加了控制器操作。
  • 不知道双打从何而来(显然它们在您的数据库中),但您可以添加一个“uniq”来摆脱它们...
  • 感谢@Danny 的信赖,我该怎么做?
  • 我会在自动完成方法中的 .map 调用之前插入它

标签: javascript ruby-on-rails typeahead.js typeahead


【解决方案1】:

正如@danny 基本上建议的那样,在地图之后使用.uniq

def autocomplete
  render json: Item.search(params[:search], {
    fields: ["title"],
    match: :word_start,
    limit: 10,
    load: false,
    misspellings: {below: 5}
  }).map(&:title).uniq
end

【讨论】:

  • 不幸的是,我仍然得到重复的标题。顺便说一句,我的数据库中确实有多个 items 具有相同的标题,似乎每个项目都在预先输入的下拉列表中添加了一个创建新标题。知道为什么会这样吗?
  • 它工作正常!!谢谢!!更改答案,以便我接受!
猜你喜欢
  • 2016-05-21
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多