没有向 search_form_for 提供 Ransack Search 对象

No Ransack Search object was provided to search_form_for

我正在使用搜索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 %>

替换

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

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

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

您正在根据 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

这样,如果可用,您可以优先搜索,否则您可以根据需要缩小搜索范围。

这不是一个非常干净的解决方案,但您基本上可以预先检查 if !@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 %>