使用PG搜索gem时,如何通过关联过滤结果?

时间:2016-07-27 12:37:48

标签: ruby-on-rails ruby activerecord pg pg-search

我在我的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

现在我可以从这一个动作中做出几个查询,但是对于这个问题会有什么更好的解决方案呢?

3 个答案:

答案 0 :(得分:1)

如何改变链条?

@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" }

答案 1 :(得分:1)

你可能应该定义一个范围(或者甚至简单的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') }

答案 2 :(得分:0)

pg_search gem提供了pg_search_scope。

请参阅文档https://github.com/Casecommons/pg_search#pg_search_scope

您也可以使用pg_search_scope链接where条件。