2016-07-27 23 views
1

我在我的Rails應用程序中使用PG搜索gem。假設我在我的控制器中收到一組文章:如何在使用PG搜索寶石時通過它們的關聯過濾結果?

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

PG查找的問題在這裏是我取回數組而不是AR對象。所以現在我不能這樣做

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

因爲我會得到一個

undefined method `where' for Array 

現在,我可以從一個動作進行多次查詢,但是這將是一個更好的解決這個問題呢?

回答

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" } 
+0

是的,問題是,我需要得到所有的結果和過濾後的事實。 –

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

與articles = Article.search(params [:search])。with_pg_search_highlight會有什麼不同? research_articles = Article.where(category:'research')。search(params [:search])。with_pg_search_highlight –

+0

它不會,但它可能有助於DRY進行50次不同的搜索。另外意圖更清楚。 – mudasobwa