我正在尝试制作食谱网站。我希望有一个侧边栏,用户可以一次添加一种成分,主体将刷新并仅显示具有该成分的配方。我认为AJAX在这里很棒。
但是我不确定这些递归搜索最好的Rails方式是什么。我的想法:
我已经实现了一个简单的搜索,我从params获取搜索词并适当地刷新食谱。我需要在每次新搜索时不断缩小范围,但是现在只需从Recipe.all
开始每次搜索。
我不确定这里最好的方法是什么。我希望这是有道理的。
答案 0 :(得分:0)
<强>的Ajax 强>
您可能正在寻找名为“live search”或“自动填充”的内容
这可以通过输入(从您的搜索框),将其发送到endpoint(如评论中所述)(通过ajax),然后在屏幕上显示结果
“持久性”将是您将数据保留在DOM中,因此您不需要将数据保留在后端,除非您希望在整个页面转换期间保持结果
上实施了类似的功能
搜索强>
您可以使用full text lookup,也可以使用sunspot
等第三方搜索搜索可以像这样处理:
#config/routes.rb
match 'search(/:search)', :to => 'recipes#search', :as => :search, via: [:get, :post]
#app/controllers/recipes_controller.rb
def search
@recipes = Recipe.search(params[:search])
respond_to do |format|
format.js { render :partial => "elements/livesearch", :locals => {:search => @recipes, :query => params[:search]} }
format.html { render :index }
end
end
#app/models/recipe.rb
def self.search(search)
basic_search(name: search, description: search).take(5)
end
#app/views/elements/livesearch.html.erb
<%= search.each do |recipe| %>
#your recipes
<% end %>
<强> JQuery的强>
以上代码将根据您的输入文本
从数据库中返回项目你需要将它附加到DOM,这是JQuery的领域:
#app/assets/javascripts/application.js
$(document).on("change", "#search_input", function() {
$.ajax({
url: "/search"
data: $(this).serialize();
success: function(data) {
//append to DOM
}
});
});