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