2016-12-18 14 views
0

私は会社を検索するアプリで検索機能を使用しています。その結果は、その会社のすべての名前と関連するprimary_categoriesに合った会社です。Ransackを使用して企業や関連カテゴリを検索する

私はransackを使用して関連する企業を取得しています。

企業とPrimaryCategoriesにはhas_many_and_belongs_to_manyの関連付けがあります。私は返された企業から関連する主要カテゴリを取得するためにコードをリファクタリングしています。

以下は変更前の方法です。

def search 
    @q = Company.ransack(name_cont: params[:q][:name], keywords_name_cont: params[:q][:name], m: 'or') 
    @companies = @q.result.uniq 
    @q2 = PrimaryCategory.ransack(name_cont: params[:q][:name]) 
    @categories = @q2.result.uniq 
    @search_term = params[:q][:name] 
end 

検索結果ページでは、会社を取得できますが、空の配列オブジェクトが返されているため、プライマリカテゴリは空白です。

私は配列オブジェクトを含むように、上記の方法を再書いた

返さ企業から関連するprimary_categoriesを抽出するためのクリーンな方法を探しています。

def search 
    @q = Company.ransack(name_cont: params[:q][:name], keywords_name_cont: params[:q][:name], m: 'or') 
    @companies = @q.result.uniq 
    @categories = [] 
    @search_categories = @companies.each {|co| @categories << co.primary_categories} 
    @categories.flatten!.uniq 
    @search_term = params[:q][:name] 
end 

これは動作しますが、私はransackを使用して同じ結果を得ることができるかどうかを知りたいと思います。個別のカテゴリ配列を作成する代わりに、ransackを使用して関連オブジェクトを取得する効率的な方法はありますか?

+0

あなたがここに到達しようとしているのは不明です。同じ検索アクションで2種類のモデルを読み込もうとしているのですか、名前やカテゴリで検索しようとしていますか? –

答えて

0

名前に基づいて企業を読み込んで、企業のカテゴリを含む最初の質問については、ActiveRecordオプションを使用するだけです。

Company.includes(:primary_categories).ransack(...)

各企業は、ロードされた熱心にそのprimary_categoriesを持っていますロード。

関連する問題