【问题标题】:No Ransack Search object was provided to search_form_for没有向 search_form_for 提供 Ransack Search 对象
【发布时间】:2018-09-26 09:03:57
【问题描述】:

我正在使用 ransack gem,它似乎无法找到搜索对象,即使它在我的控制器中。

这是索引方法

  def index
      if params[:q].present?
       @search = Patient.search(params[:q])
       @patients = @search.result
      else
       @patients = Patient.where(:user_id => params[:user_id])
      end
  end

这是视图表单

<%= search_form_for @search do |f| %>
                <div class="field">
                    <%= f.label :name_cont, "Name" %>
                    <%= f.text_field :name_cont %>
                </div>
                  <div><%= f.submit %></div>
            <% end %>

【问题讨论】:

    标签: ruby-on-rails ruby ransack


    【解决方案1】:

    不是一个非常干净的解决方案,但您基本上可以预先检查 !@search.blank?在你看来。

    <% if (!@search.blank?) %>
    <%= search_form_for @search do |f| %>
      <div class="field">
        <%= f.label :name_cont, "Name" %>
        <%= f.text_field :name_cont %>
      </div>
      <div><%= f.submit %></div>`enter code here`
    <% end %>
    

    【讨论】:

      【解决方案2】:

      您根据params[:q] 有条件地设置搜索,因为它依赖于您视图中的表单,因此永远不会生成。

      我会像这样修改你的控制器中的代码

      def index 
        @search = Patient.search(params[:q])
        @patients = @search.result
        if params[:q].blank?
          @patients = Patient.where(:user_id => params[:user_id])
        end
      end
      

      这样,如果搜索可用,您可以优先搜索,否则您可以将其范围缩小到您想要的范围。

      【讨论】:

        【解决方案3】:

        替换

           <%= search_form_for @search do |f| %>
        

           <%= search_form_for @search, url: url_for(controller: 'users', action: 'index') do |f| %>
        

        将控制器名称替换为您自己的控制器

        【讨论】:

        • 我仍然遇到同样的错误 => 没有向 search_form_for 提供 Ransack::Search 对象!
        猜你喜欢
        • 2014-02-16
        • 1970-01-01
        • 2014-06-25
        • 2012-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-31
        相关资源
        最近更新 更多