2016-07-27 4 views
1

私はRailsアプリケーションでPG検索宝石を使用しています。私のコントローラで記事のセットを取得したとします:PG検索宝石を使用しているときにどのように関連付けによって結果をフィルタリングするのですか?

私はここでは、ARオブジェクトの代わりに、配列を取得することです。私は

undefined method `where' for Array 

を取得しますのでだから今、私は

@research_articles = @articles.where(category: 'research') 

ような何かを行うことができない今、私はその1つのアクションから複数のクエリを行うことができますが、何がこの問題のより良い解決策でしょうか?

答えて

1

チェーンの交換はどうですか?

@articles = Article.where(category: 'research').search(params[:search]).with_pg_search_highlight 

EDIT:2つのクエリを作成せずに

方法は次のようになります。

@found_articles = Article.search(params[:search]).with_pg_search_highlight 
@research_articles = @found_articles.select { |article| article.category == "research" } 
+0

ええ、問題は、すべての結果を取得し、その事実の後にフィルタリングする必要があるということです。 –

1

あなたはおそらくスコープを定義する必要があります(あるいは、単純なゲッターはここに十分だろう)と、それを再利用:

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') } 
+0

articles = search(params [:search])とはどのように異なるでしょうか。with_pg_search_highlight; with_pg_search_highlight –

+0

それはそうではありませんが、50種類の検索のDRYに役立つかもしれません。プラスの意図はより明確です。 – mudasobwa

関連する問題