全文検索にpg_searchを使用しています。検索語を入力すると正常に機能しますが、空の文字列を指定すると、すべてのモデルが返されると期待され、結果が得られません。
空の検索ですべてのモデルを返すようにpg_search_scopeを構成するにはどうすればよいですか?
ありがとうございました
全文検索にpg_searchを使用しています。検索語を入力すると正常に機能しますが、空の文字列を指定すると、すべてのモデルが返されると期待され、結果が得られません。
空の検索ですべてのモデルを返すようにpg_search_scopeを構成するにはどうすればよいですか?
ありがとうございました
これがhttps://github.com/Casecommons/pg_search/issues/49からの私の答えです
いくつかの理由から、空のクエリがあると常にすべてのレコードがトリガーされるとは思いません。
まず、レコードを返すための明確な順序があるとは思いません。(通常の検索ランクによる並べ替えは、クエリがないと意味がありません)
次に、データベースは、さまざまな検索機能が空白の文字列を処理する方法を定義して、すべてのロジックが1か所に存在するようにする必要があると思います。
したがって、この回避策を提供したいと思います。これは、お客様の状況により適していると思います。
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])