rails pg_search关联搜索

问题描述

我有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}%")

现在我要添加pg_search gem并修改Album

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...