使用 PG 搜索 gem 时如何按关联过滤结果?
How to filter results by their associations when using PG search gem?
我在 Rails 应用程序中使用 PG 搜索 gem。假设我在我的控制器中得到了一组文章:
@articles = Article.search(params[:search]).with_pg_search_highlight
此处 PG 搜索的问题是我返回的是一个数组,而不是 AR 对象。所以现在我不能做类似
的事情
@research_articles = @articles.where(category: 'research')
因为我会得到一个
undefined method `where' for Array
现在我可以从一个操作中提出多个查询,但是对于这个问题,什么是更好的解决方案?
换链呢?
@articles = Article.where(category: 'research').search(params[:search]).with_pg_search_highlight
编辑:
一种不进行 2 次查询的方法是:
@found_articles = Article.search(params[:search]).with_pg_search_highlight
@research_articles = @found_articles.select { |article| article.category == "research" }
您可能应该定义一个范围(或者甚至简单的 getter 就足够了)并重用它:
def simple_search
pure = Article.search(params[:search])
(block_given? ? yield(pure) : pure).with_pg_search_highlight
end
然后:
@articles = simple_search
@research_articles = simple_search { |ss| ss.where(category: 'research') }
pg_search gem 提供 pg_search_scope。
查看文档 https://github.com/Casecommons/pg_search#pg_search_scope
您还可以将 where 条件与 pg_search_scope 链接起来。
我在 Rails 应用程序中使用 PG 搜索 gem。假设我在我的控制器中得到了一组文章:
@articles = Article.search(params[:search]).with_pg_search_highlight
此处 PG 搜索的问题是我返回的是一个数组,而不是 AR 对象。所以现在我不能做类似
的事情@research_articles = @articles.where(category: 'research')
因为我会得到一个
undefined method `where' for Array
现在我可以从一个操作中提出多个查询,但是对于这个问题,什么是更好的解决方案?
换链呢?
@articles = Article.where(category: 'research').search(params[:search]).with_pg_search_highlight
编辑:
一种不进行 2 次查询的方法是:
@found_articles = Article.search(params[:search]).with_pg_search_highlight
@research_articles = @found_articles.select { |article| article.category == "research" }
您可能应该定义一个范围(或者甚至简单的 getter 就足够了)并重用它:
def simple_search
pure = Article.search(params[:search])
(block_given? ? yield(pure) : pure).with_pg_search_highlight
end
然后:
@articles = simple_search
@research_articles = simple_search { |ss| ss.where(category: 'research') }
pg_search gem 提供 pg_search_scope。
查看文档 https://github.com/Casecommons/pg_search#pg_search_scope
您还可以将 where 条件与 pg_search_scope 链接起来。