我刚刚关注了一个关于在我的搜索字段中添加jQuery-ui自动完成功能的youtube教程。这是教程的链接:https://www.youtube.com/watch?v=iMz8HmrQ350。
由于某种原因,它不起作用,尽管不断阅读教程和重新检查语法。当我重新加载Web浏览器时,我没有收到任何错误,但是,当我在搜索字段中输入时,没有任何内容显示为下拉菜单。有趣的是,如果我使用数组作为样本数据,它就可以工作(下拉菜单会显示使用样本数组数据的建议)。但是当我尝试将它链接到我的帖子数据库时,它就不再起作用了。我已经在下面展示了两种方式的示例代码。
我的代码如下 - 任何帮助非常感谢我一直尝试添加此功能一段时间尝试无数的教程和方法。哈哈很烦人。
我是编码的新手,到目前为止我自学了。如果需要任何其他文件,请告诉我。
PS。我目前正在使用弹性搜索和搜索功能进行简单搜索。这可能与自动完成功能无关吗?我也在我的宝石文件中使用gem:“gem'query-ui-rails'”,这一点很重要。
posts.coffee
jQuery ->
$('#search').autocomplete
source: "/search_suggestions"
search_suggestions_controller.rb
class SearchSuggestionsController < ApplicationController
def index
render json: SearchSuggestion.terms_for(params[:term])
end
end
如果我使用阵列作为样本数据,它的工作原理 - 示例:
class SearchSuggestionsController < ApplicationController
def index
render json: %w[test test1]
end
end
MODEL:search_suggestion.rb
class SearchSuggestion < ApplicationRecord
attr_accessible :popularity, :term
def self.terms_for(prefix)
suggestions = where("term like ?", "#{prefix}_%")
suggestions.order("popularity desc").limit(10).pluck(:term)
end
def self.index_posts
Post.find_each do |post|
index_term(post.title)
post.title.split.each { |t| index_term(t) }
end
end
def self.index_term(term)
where(term: term.downcase).first_or_initialize.tap do |suggestion|
suggestion.increment! :popularity
end
end
end
任务文件:search_suggestions.rake
namespace :search_suggestions do
desc "Generate search suggestions from posts"
task :index => :environment do
SearchSuggestion.index_posts
end
end
答案 0 :(得分:0)
如果它适用于您的数组存根,那么这意味着您的JS可能正在工作,并且您的控制器/模型中存在一些时髦的事情。
您是否检查过jquery对浏览器的请求?和响应?
我不确定您的数据是如何构建的,但是
suggestions = where("term like ?", "#{prefix}_%")
要检查几点:
在浏览器中检查开发者控制台的请求。检查是否正确发送了术语param,以及响应有效负载中是否有任何内容(您的desribe看起来响应方式为空)
在控制器/模型中使用pry,检查进入的参数以及查询结果suggestions = where("term like ?", "#{prefix}_%")
检查rake任务是否真的有效(你运行了rake任务吗?)。如果您的条款已正确填充。 (控制台中的SearchSuggestion.all
之类的东西。)