【问题标题】:Can't get rails search form to work with simple_form and sunspot无法让 rails 搜索表单与 simple_form 和 sunspot 一起使用
【发布时间】:2013-03-22 21:59:21
【问题描述】:

我有一个简单的 Rails 应用程序,它使用 simple_form gem 作为表单,我正在尝试使用 sunspot 设置搜索表单。我已按照 Ryan Bates 的 railscast 中关于设置太阳黑子的说明进行操作,除了我知道我没有使用 simple_form 助手并且我想使用这一事实外,它工作正常。这是搜索表单的代码:

来自_search.html.erb:

<%= form_tag rules_path, :method => :get do |f| %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
<% end %>

来自 rules_controller.rb:

def index
  @search = Rule.search do
    fulltext params[:search]
  end
  @rules = @search.results

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @rules }
  end
end

就像我提到的,这暂时有效,但问题是:

如何更改 _search.html.erb 以使用 simple_form 格式?

【问题讨论】:

    标签: ruby-on-rails search simple-form sunspot railscasts


    【解决方案1】:

    我可以通过为表单提供与输入名称相同的symbol 并指定 URL 来使其工作。看看您的form_tag 生成的 URL 以及 simple_form_for 仅通过路径生成的内容。所以在你的表单中试试这个:

    <%= simple_form_for :search,  url: rules_path , :method => :get do |f| %>
        <%= f.input :query, :autofocus => true %>
        <%= f.submit "Search" %>
    <% end %>
    

    如果这不起作用,请研究您的 form_tag 生成的内容并尝试使用 simple_form 进行复制。

    【讨论】:

      【解决方案2】:

      为此,我使用 simple_form 的下一个方法:

      1.定义一个表单(我用haml)

      =simple_form_for :search, url: search_path(:search), :method => :get  do |f|
       =f.input :q
       =f.submit "Search"
      

      2。在 routes.rb 中定义路由

      get '/jobs/search/:q', :to => 'jobs#search', :as => :search
      

      3.在控制器中定义一个方法(在我的例子中是 jobs_controller.rb)

        def search
         @search = params[:search][:q]
        end
      

      【讨论】:

        【解决方案3】:

        您是否尝试过以下方法:

        <%= simple_form_for rules_path, :method => :get do |f| %>
          <%= f.input :search %>
          <%= f.button :submit %>
        <% end %>
        

        【讨论】:

        • 我试过了,得到了以下错误:undefined method rule_rule_rule_rule_rule_rule_rule_rule_rule_rule_rule_rule_path' for #:0x00000103b733e8>`
        • 你可以试试&lt;%= simple_form_for rules_path do |f| %&gt;吗?
        • 当我尝试提交按钮显示“保存/规则”并在单击时尝试保存新规则。
        • 缺少的是:method =&gt; :get,对不起!
        • 这仍然存在提交操作链接到保存空的新操作链接上述评论的问题。
        【解决方案4】:

        使用我的指南来获得使用 AJAX 的 simple_form 就地搜索框:http://rexstjohn.com/in-place-ajax-search-box-with-ruby-simple_form-gem/

        【讨论】: