2016-07-27 22 views
1

Ich benutze PG Suche Edelstein in meiner Rails App. Sagen, dass ich eine Reihe von Artikeln in meinem Controller erhalten:Wie filtern Ergebnisse nach ihren Assoziationen bei der Verwendung von PG-Suche gem?

@articles = Article.search(params[:search]).with_pg_search_highlight 

das Problem mit PG Suche hier ist, dass ich wieder ein Array erhalten, anstelle von AR-Objekt. So, jetzt kann ich nicht so etwas wie

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

tun, weil ich ein

undefined method `where' for Array 

Jetzt erhalten werde ich mehrere Anfragen aus, dass eine Aktion machen kann, aber was wäre eine bessere Lösung für dieses Problem sein?

Antwort

1

Wie wäre es mit der Änderung der Kette?

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

EDIT:

Ein Weg 2 Abfragen, ohne wäre:

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

ja, das Problem ist, dass ich alle Ergebnisse und Filter nach der Tatsache bekommen muss. –

1

Sie sollten wahrscheinlich einen Umfang definieren (oder auch einfache Getter würde genug hier sein) und wieder verwenden es:

def simple_search 
    pure = Article.search(params[:search]) 
    (block_given? ? yield(pure) : pure).with_pg_search_highlight 
end 

Und dann:

@articles = simple_search 
@research_articles = simple_search { |ss| ss.where(category: 'research') } 
+0

Wie wäre es anders als articles = Article.search (params [: search]). With_pg_search_highlight; research_articles = Article.where (Kategorie: 'research'). search (params [: search]). with_pg_search_highlight –

+0

Es wird nicht funktionieren, aber es könnte helfen, 50 verschiedene Suchen zu DRY zu machen. Plus die Absicht ist klarer. – mudasobwa