0

我在 Rails 3.1 上,我正在使用Ransack Gem。这就是我的控制器中的内容:

@q = Person.search(params[:q])
@people = @q.result 

这是我的看法:

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

  <label>Given Name:</label>
  <%= f.text_field :given_name_cont %>

  <label>Family Name:</label>
  <%= f.text_field :family_name_cont %>

  <%= f.submit %>

<% end %>

这很好用,并且符合 Ransack 文档。但是,如果我的搜索表单不包含任何参数(即没有指定要搜索的内容),它会返回所有记录。我想要发生的是没有返回记录。

我的 Ruby 很弱,所以如果没有 params[:q] 或 params[:q] 没有指定任何搜索条件(即用户提交了一个空表单),有人可以告诉我如何干净地让@people 返回一个空数组.

本质上,我的问题与StackOverFlow 上的 Metasearch 问题相同,但该解决方案似乎不适用于 Ransack,因为它抱怨“search_attributes”不是可用的方法。

重要的是它返回 0 条记录,没有提交任何参数并且提交了空参数。任何解释为什么你的代码有效的注释都会很好。谢谢。

4

1 回答 1

0

您可以将控制器代码替换为:

if !params[:q].blank?  # nil.blank? and [].blank? are true
  @q = Person.search(params[:q])
  @people = @q.result 
else
  @people = []
end
于 2011-10-25T08:37:55.757 回答