Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails实现连续边栏搜索的最佳方式是什么?_Ruby On Rails_Ajax_Search - Fatal编程技术网

Ruby on rails Rails实现连续边栏搜索的最佳方式是什么?

Ruby on rails Rails实现连续边栏搜索的最佳方式是什么?,ruby-on-rails,ajax,search,Ruby On Rails,Ajax,Search,我正在尝试制作一个食谱网站。我希望有一个侧边栏,用户可以一次添加一种成分,其中主体将刷新并仅显示含有该成分的食谱。我认为AJAX在这里会很棒 但我不确定Rails进行这些递归搜索的最佳方式是什么。我的想法是: 使用session保存搜索词——但我在某处读到,session只用于保存短字符串数据,比如id 创建新的表资源以保存搜索词。使用每个新会话重置表 复制配方表并仅对当前配方(通过上一次搜索的配方)应用新搜索。类似于表视图的东西,如果我记得从我参加db课程时就开始了 我实现了一个简单的搜索

我正在尝试制作一个食谱网站。我希望有一个侧边栏,用户可以一次添加一种成分,其中主体将刷新并仅显示含有该成分的食谱。我认为AJAX在这里会很棒

但我不确定Rails进行这些递归搜索的最佳方式是什么。我的想法是:

  • 使用session保存搜索词——但我在某处读到,session只用于保存短字符串数据,比如id
  • 创建新的表资源以保存搜索词。使用每个新会话重置表
  • 复制配方表并仅对当前配方(通过上一次搜索的配方)应用新搜索。类似于表视图的东西,如果我记得从我参加db课程时就开始了
我实现了一个简单的搜索,从params中获取搜索词,并适当地刷新食谱。我需要在每次新搜索中不断缩小搜索范围,但每次搜索都要从
Recipe.all
开始

我不确定这里最好的方法是什么。我希望这是有道理的

Ajax

您可能正在查找名为“”或“自动完成”的内容

其工作原理是(从搜索框中)获取输入,将其发送到(如注释中所述)(通过ajax),然后在屏幕上显示结果

“持久性”是指将数据保存在DOM中,因此不需要将数据保存在后端,除非您希望在整个页面转换过程中维护结果

我们在上实现了类似的功能


搜索

您可以使用,也可以使用第三方搜索,如

搜索可按如下方式处理:

#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
用途:


正如您所说,使用AJAX查询API点。让它返回JSON。使用像角度或击倒可以使视图重建更容易。谢谢你给我的方向!这是一个非常彻底的答案。我比你想象的还要感激。没问题-希望它能帮助你!
#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 %>
#app/assets/javascripts/application.js
$(document).on("change", "#search_input", function() {
    $.ajax({
       url: "/search"
       data: $(this).serialize();
       success: function(data) {
           //append to DOM
       }
    });
});