我是RAILS的新手,甚至还不熟悉AJAX呼叫。
我有一个搜索栏,我想在其中执行自动完成以帮助用户查找数据库中存在的项目。 目前,我仅试图在控制台内显示AJAX调用的数据,但是无论我做什么,都总是空的...
我正在使用Rails 5.2.1
我的表格:
<%= form_tag autocomplete_index_path,remote: true, method: :get do %>
<%= text_field_tag 'term', params[:term], class:"my_form"%>
<%= submit_tag "bouton", class: "my_button" %>
<% end %>
我的控制器(使用pg搜索)
class AutocompleteController < ApplicationController
def index
respond_to do |format|
format.json { render json: { data: Beer.search_beer(params[:term]).limit(5)} }
end
end
end
还有我的资产/ javascript文件
$(document).ready(function(){
$(".my_form").keyup(function(){
var search = $(this).val();
if(search != ""){
$.ajax({
url: 'autocomplete',
method: 'GET',
dataType: 'json',
data: {'name': $("#term").val()},
success:function(data){
console.log('Success!', data);
}
});
}
});
});
具有pg范围的啤酒模型
class Beer < ApplicationRecord
include PgSearch
belongs_to :brewery
belongs_to :category
belongs_to :style
has_many :bars, through: :beer_lists
pg_search_scope :search_beer,
against: :name,
using: {
tsearch: {
prefix: true
}
}
end
如果有人可以帮助我弄清楚为什么Ajax调用总是呈现一个空数组,那将不胜感激!
答案 0 :(得分:0)
1)您是否检查过params[:term]
实际包含您输入的字符串?例如,通过在控制器中索引方法的开头添加一个binding.pry
,并在终端控制台中检查由params[:term]
停止代码后binding.pry
的值是什么?
2)您的search_beer
方法是什么?
您是否尝试过按照以下说明在Beer模型中定义pg搜索范围:https://github.com/Casecommons/pg_search#user-content-pg_search_scope?
然后,您可以使用search_by_name
方法(如果您的Beer模型具有name
属性),以便Beer.search_by_name(params[:term])
返回一组啤酒,其名称与您在params[:term]
中的名称匹配< / p>