我正在构建一个评论网站,用户可以在其中查看多种类型的商家。使用STI存储业务,用户拥有自己的模型。我想实现一个搜索栏,人们可以搜索用户或企业。输入pg_search
module Business
class Venue < Base
include PgSearch
multisearchable :against => [:name, :address, :locality, :region]
end
end
module Business
class Service < Base
include PgSearch
multisearchable :against => [:name, :address, :locality, :region]
end
end
用户模型在这里并不重要。问题是pg_search使用Business :: Base作为所有业务子类的可搜索类型。
PgSearch::Multisearch.rebuild(Business::Venue)
返回
(0.3ms) INSERT INTO "pg_search_documents" (searchable_type, searchable_id, content, created_at, updated_at)
SELECT 'Business::Base' AS searchable_type, ...
有没有办法在我的模型中指定searchable_type,或者有什么原因导致它不起作用?
答案 0 :(得分:0)
您可以将第二个参数(布尔值)传递给rebuild
方法,以防止它删除所有记录。
def rebuild(model, clean_up=true)
model.transaction do
PgSearch::Document.where(:searchable_type => model.base_class.name).delete_all if clean_up
Rebuilder.new(model).rebuild
end
end
因此,如果您有多个继承的模型,您可以执行以下操作:
PgSearch::Document.where(searchable_type: 'Business::Base').delete_all
PgSearch::Multisearch.rebuild(Business::Venue, false)
PgSearch::Multisearch.rebuild(Business::Service, false)