pg_search_scope с пустой строкой

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

Как я могу настроить pg_search_scope для возврата всех моделей при пустом поиске?

Спасибо

1 ответ

Решение

Вот мой ответ от https://github.com/Casecommons/pg_search/issues/49


Я не думаю, что наличие пустого запроса всегда должно запускать все записи по нескольким причинам.

Во-первых, я не думаю, что существует четко определенный порядок возврата записей. (Обычная сортировка по рангу поиска бессмысленна без запроса)

Во-вторых, я думаю, что база данных должна определять, как различные функции поиска обрабатывают пустую строку, чтобы вся логика находилась в одном месте.

Итак, я хочу предложить этот обходной путь, который, я думаю, сработает лучше для вашей ситуации.

class MyModel < ActiveRecord::Base
  include PgSearch

  pg_search_scope :search_by_name, :against => :name

  def self.search(query)
    if query.present?
      search_by_name(query)
    else
      # No query? Return all records, newest first.
      order("created_at DESC")
    end
  end
end

Это решение по-прежнему должно быть цепным, поэтому вы можете безопасно вызывать что-то подобное в своем контроллере (при условии, что вы используете библиотеку разбиения на страницы, такую ​​как kaminari.

MyModel.where(:published => true).search(params[:query]).page(params[:page])
Другие вопросы по тегам