Возврат 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 довольно слаб, поэтому может кто-нибудь показать мне, как правильно заставить @people возвращать пустой массив, если нет params[:q] или params[:q] не указывает никаких критериев поиска (т.е. пользователь отправил пустую форму) .

По сути мой вопрос такой же, как этот Поиск вопроса в StackOverFlow, но решение, похоже, не работает для Ransack, поскольку он жалуется, что "search_attributes" недоступен.

Важно, что он возвращает 0 записей без отправленных параметров и с отправленными пустыми параметрами. Будут полезны любые примечания, объясняющие, почему ваш код работает. Спасибо.


person Oscar    schedule 25.10.2011    source источник


Ответы (1)


Вы можете заменить код контроллера на:

if !params[:q].blank?  # nil.blank? and [].blank? are true
  @q = Person.search(params[:q])
  @people = @q.result 
else
  @people = []
end
person Chowlett    schedule 25.10.2011
comment
Спасибо работает отлично. Объяснение # nil.blank? и [].blank? также был полезен. - person Oscar; 25.10.2011