Rails多个form_tag路径/实现全局搜索

时间:2015-07-03 19:12:04

标签: ruby-on-rails

我对this提出了类似的问题,但仍然无法弄明白。

我正在创建一个链接到Neo4j数据库的rails应用程序,并且有一些我想用一个搜索表单搜索的模型。我正在使用弹性搜索。

我目前在一个模型中搜索的代码(工作正常):

#/app/views/symptoms/index.html
<%=form_tag symptoms_path, class: "form-inline", method: :get do %>
  <div class="form-group">
    <%= text_field_tag :query, params[:query], class: "form-control" %>    
    <%= submit_tag "Search", class: "btn btn-primary" %>
    <% if params[:query].present? %>    
    <%= link_to "clear" %>
    <% end %>
  </div>
  <% end %>

#/app/controllers/symptoms_controller.rb
def index
  if params[:query].present?
    @symptoms = Symptom.search(params[:query], show: params[:show])
  else
    @symptoms = Symptom.all
  end
end

目前,这只会在症状模型中进行搜索。我想创建一个全球搜索&#39;将在symptoms_path,allergies_path和drugs_path中搜索的字段。

潜力&#39;全球搜索&#39;代码:

#/app/views/global_search/index.html
<%=form_tag [symptoms_path, allergies_path, drugs_path], class: "form-inline", method: :get do %>
  <div class="form-group">
    <%= text_field_tag :query, params[:query], class: "form-control" %>    
    <%= submit_tag "Search", class: "btn btn-primary" %>
    <% if params[:query].present? %>    
    <%= link_to "clear" %>
    <% end %>
  </div>
  <% end %>

#/app/controllers/symptoms_controller.rb
def index
    if params[:query].present?
        @allergies = Allergy.search(params[:query], show: params[:show])
        @drugs = Drug.search(params[:query])
        @symptoms = Symptom.search(params[:query])
    else
        @allergies = Allergy.all
        @drugs = Drug.all
        @symptoms = Symptom.all
    end
end

关于如何实现这一点的任何想法?提前谢谢!

1 个答案:

答案 0 :(得分:1)

我可能建议您创建像&#34; search_controller&#34; (rails generate controller search应该帮助你做到这一点)。在那里,您可以进行index操作(或任何您想要调用的操作),然后您只需设置一个指向其的URL的路径,例如:

# config/routes.rb
  # Link the URL to the search controller's `index` action
  post '/search/:query' => 'search#index'

# app/controllers/search_controller.rb

  def index
    if params[:query].present?
      @allergies = Allergy.search(params[:query], show: params[:show])
      @drugs = Drug.search(params[:query])
      @symptoms = Symptom.search(params[:query])
    else
      @allergies = Allergy.all
      @drugs = Drug.all
      @symptoms = Symptom.all
    end
  end

很抱歉,如果我误解了,我不确定您之前使用Rails的程度是多少