没有向search_form_for提供 Ransack 搜索对象



我正在使用洗劫宝石,它似乎找不到搜索对象,即使它在我的控制器中。

这是索引方法

  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
这样,如果搜索可用,您可以

优先搜索,否则您可以将其范围缩小到您想要的方式。

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

最新更新