【问题标题】:Autocomplete doesn't seem to work with ruby on rails自动完成似乎不适用于 ruby​​ on rails
【发布时间】:2014-07-13 21:21:24
【问题描述】:

我正在尝试在我的视图文件 index.html.erb 中包含以下代码的搜索文本字段上实现自动完成

<%= form_tag search_path, method: :get do %>
<p>
<%= text_field_tag :query, params[:query], :id => 'autocomplete'  %>
<%= submit_tag "Search", name: nil %>
</p>
<% end %>

我在我的模型中包含了以下方法

def self.query_matches(term) 
tire.search do
    query {string "query:#{term}"}  
end
end

和控制器如下

def autocomplete
results = Univ.query_matches(params[:term]) 
render :json => results, :callback => params[:callback] 
end

我在 js 文件夹中的 application.js 文件中包含了 jQuery-ui。但是,我看不到自动完成功能在我的视图中运行。

用于此的jQuery im如下

jQuery ->
$("#autocomplete").autocomplete ({
source: function(request,response) {
jQuery.ajax({
url: "http://localhost:3000/univ/autocomplete.json",
dataType: "jsonp",
data: {
    term: request.term
},
success: function(data){
var rows: [];
for( var i = 0; i< data.length; i++){
    rows.push({data[i].query,value:data[i].query});
}
response(rows);
}
});
}
});

谁能建议我哪里出错了?

谢谢!

【问题讨论】:

    标签: javascript ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 autocomplete


    【解决方案1】:

    在 index.html.erb 中

    <%= form_tag search_path, method: :get do %>
     <p>
      <%= text_field_tag :query, params[:query], :id => 'autocomplete', data: {autocomplete_source: univ_autocomplete_url}  %>
      <%= submit_tag "Search", name: nil %>
     </p>
    <% end %>
    

    在 univ_controller 中为:

    def autocomplete
     results = Univ.where("field_name LIKE ?", "#{params[:term]}%")
     render json: results.map(&:field_name)
    end
    

    在 application.js 中为:-

    $(document).ready(function() {
     $( "#autocomplete" ).autocomplete({
        source: $( "#autocomplete" ).data('autocomplete-source')
     });
    });
    

    如果在表单中输入两个字符时搜索字段,那么它应该写成或者可以根据需要进行更改:-

    $(document).ready(function() {
     $( "#autocomplete" ).autocomplete({
        minLength: 2,
        source: $( "#autocomplete" ).data('autocomplete-source')
     });
    });
    

    添加 routes.rb:-

    get "univ/autocomplete"
    

    注意:- 应该有一个名为 univ 的控制器,或者在控制器中添加这个 自动完成方法 并检查路由。然后用 data: {autocomplete_source: univ_autocomplete_url} 中的新路由更改路由 univ_autocomplete_url

    如果在其他控制器中添加了 autocomplete 方法,则将 routes.rb 更改为:-

    get "controller_name/autocomplete"
    

    【讨论】:

    • 我收到一个错误,因为未定义的局部变量或方法 'univ_autocomplete_url'。我是否必须包含一个名为自动完成的视图?
    • 在 url: "localhost:3000/univ/autocomplete.json" 行中检查您在 ajax 中使用的 /univ/autocomplete 的路由,然后进行更改。
    • 我检查了我的路线我没有看到任何与 univ/autocomplete.json 匹配的路线。早些时候我试图实现一个例子,所以我不确定我在哪里做错了。知道代码的哪一部分需要更新吗?
    • 我更新了帖子中所做的更改。但是搜索字段仍然不起作用:/对不起,我将其包含在您的答案中
    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多