簡體   English   中英

使用PG搜索gem時,如何按結果關聯過濾結果?

[英]How to filter results by their associations when using PG search gem?

我在我的Rails應用程序中使用PG搜索寶石。 假設我在控制器中收到了一系列文章:

@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

您也可以使用pg_search_scope鏈接條件條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM