没有向search_form_for提供Ransack搜索对象

时间:2018-04-16 14:57:55

标签: ruby-on-rails ruby ransack

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

3 个答案:

答案 0 :(得分:1)

替换

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

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

用您自己的控制器替换控制器名称

答案 1 :(得分:0)

您有条件地设置基于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

通过这种方式,您可以将搜索设置为优先级,如果可用,则将其范围缩小到您希望的范围。

答案 2 :(得分:0)

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