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