Как установить 0 результат в meta_search до того, как пользователь нажмет кнопку поиска - PullRequest
2 голосов
/ 29 апреля 2011

Я использую meta_search в своем приложении rails 3. По умолчанию (до нажатия кнопки поиска) meta_search возвращает все элементы модели поиска. и я хочу установить 0 результат, прежде чем пользователь нажмет кнопку поиска или если параметры поиска будут пустыми.

Я использую meta_search следующим образом:

def index
 @search = Article.search(params[:search])
  if params[:search].blank?
    @places = nil
  else
    @places = @search.all
  end
end

Каков наилучший способ установить результат 0, если параметры поиска пустые?

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Я не думаю, что Meta Search действительно предоставляет что-то из коробки, но вы всегда можете обмануть это.

def index
  @search = Article.search(params[:search].presence || {:id_lt => 0})
  @places = @search.all
end
1 голос
/ 29 апреля 2011

На мой взгляд, ваше решение достаточно хорошее.Понятно, что он делает, и он не обращается к базе данных без необходимости.Но код может быть улучшен до:

def index
  @search = Article.search(params[:search])
  @places = @search.search_attributes.values.all?(&:blank?) ? [] : @search.all
end

Проверка хеша на пустое не способ сделать это.Хэш типа {'name_contains' => ''}, который вы получите, если отправленная форма будет пустой, вернет false.

Также лучше установить @places в пустой массив, а не nil.Таким образом, вам не нужно проверять nil, и ваш цикл все равно будет работать.

...