问题描述
我有3个模型
class Site
has_many :album_stats
end
class Album
has_many :album_stats
end
class AlbumStat
belongs_to :album
belongs_to :site
end
在Pg_search之前,我是这样搜索的
site = Site.first
site.album_stats.left_joins(:album).where('albums.tag LIKE ? or albums.title LIKE ?',"%#{@tag}%","%#{@tag}%")
class Album
include PgSearch::Model
pg_search_scope :search,against: %i[title tag],using: { tsearch: { dictionary: 'english',tsvector_column: 'searchable',any_word: true } }
在相册模型中搜索可以正常工作,但如何修改旧查询以通过pg_search搜索?
site.album_stats.left_joins(:album).where('albums.tag LIKE ? or albums.title LIKE ?',"%#{@tag}%")
解决方法
您可以尝试这样:
# app/models/album_set.rb
class AlbumStat
include PgSearch::Model
belongs_to :album
belongs_to :site
pg_search_scope :album_search,associated_against: { album: [:tag,:title] },using: {
tsearch: {
dictionary: 'english',tsvector_column: 'searchable',any_word: true
}
}
end
现在,您可以像这样修改查询:
site.album_stats.album_search("Your Value")