带导轨的预先输入

时间:2015-07-02 15:22:20

标签: ruby-on-rails typeahead.js

我正在尝试使用rails实现twitter typeahead。 我使用searchkick gem和elasticsearch完成了这项工作。

这里有一个小问题,我的BloodHound远程调用是这样的

var engine = new Bloodhound({
        datumTokenizer: function(d) {
            console.log(d);
            return Bloodhound.tokenizers.whitespace(d.username);
        },
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: {
            url: "../users/autocomplete?query=%QUERY"
        }
    });

现在在这里,而不是将%QUERY替换为typeahead搜索框的值,它只是给出字符串%QUERY。

休息一切正常,因为如果我转到网址

http://localhost:3000/users/autocomplete?query=vive

我得到了理想的结果。

只是%QUERY没有被替换。

这是表格

<%= form_tag users_path, class:'ui form',method: :get do %>
   <div class="ui small icon input">
    <%= text_field_tag :query, params[:query],class:'typeahead',id:'user_search',placeholder:'Search Breeder' %>
    <i class="search icon"></i>
   </div>
<%end%>

和控制器

def autocomplete
 render json: User.search(params[:query],autocomplete:true).map{|user| {username:user.username,value:user.id}}           
end

/ 的routes.rb /

resources :users do
   collection do
      get :autocomplete
    end
  end

有人可以帮忙。

1 个答案:

答案 0 :(得分:0)

好吧,经过努力寻找答案,我不知何故让它发挥作用。

所以对于那些被困在同一个地方的人来说,这就是解决方案:

var engine = new Bloodhound({
        datumTokenizer: function(d) {
            console.log(d);
            return Bloodhound.tokenizers.whitespace(d.username);
        },
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: {
            url: "../users/autocomplete?query=%QUERY",
            //add wildcard to make it work
            wildcard:"%QUERY"
        }
    });

希望它有所帮助。