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])