我正在使用洗劫宝石,它似乎找不到搜索对象,即使它在我的控制器中。
这是索引方法
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 %>