2012-04-17 2 views
0

高度な検索のためにアクティブレコードクエリをモデルに書き込もうとしています。アクティブレコードクエリ - 多くのスルーアソシエーションを持っています

私は企業のモデルを持っており、各企業は、私は現時点では私の検索方法に組み込まれ、次のを持っているカテゴリ化

を通じて多くのカテゴリーがあります。

def find_firms 
    firms = Firm.order(:name) 
    firms = firms.where("name like ?", "%#{name}%") if name.present? 
    firms = firms.categories.find(id: category_id) if category_id.present? 
end 

私のカテゴリのスキーマは次のようになります。

create_table "categories", :force => true do |t| 
    t.text  "name" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
end 

と私の分類

create_table "categorizations", :force => true do |t| 
    t.integer "category_id" 
    t.integer "firm_id" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
end 

と私の検索フォームビュー

<div class="field"> 
    <%= f.label :category_id, "Practice Area" %><br /> 
    <%= f.collection_select :category_id, Category.order(:name), :id, :name, include_blank: true %> 
    </div> 

私が間違っているの何任意のアイデア?

私はエラーを取得しておくと:

undefined method `categories' 

感謝を。

ロス

答えて

1

あなたが失敗しますfirmsによって返される配列にcategoriesメソッドを実行しようとしています。私はあなたが与えられたカテゴリIDを持つ会社を返すことを前提としています。

def find_firms 
    firms = Firm.order(:name) 
    firms = firms.joins(:categories). 
      where(:categories =>{ id : category_id}).uniq if category_id.present? 
    firms = firms.where("name like ?", "%#{name}%") if name.present? 
end 
+0

それは絶対に夢のように動作します!ありがとうございました – RMcNairn

1
はこれにあなたの find_firm機能を変更

def find_firms 
    if category_id.present? 
     if name.present? 
     Firm.where("name like ?", "%#{name}%").joins("JOIN categorizations ON firms.id = categorizations.firm_id").where("categorizations.category_id = ?", category_id).order(:name) 
     else 
     Firm.joins("JOIN categorizations ON firms.id = categorizations.firm_id").where("categorizations.category_id = ?", category_id).order(:name) 
    elsif name.present? 
     Firm.where("name like ?", "%#{name}%").order(:name) 
    else 
     Firm.order(:name) 
    end 
    end 
+0

こんにちはエリック、返信用のおかげで、それはまだエラーを投げているようだ:未定義のメソッド 'カテゴリ – RMcNairn

+0

私は動作するはずのコードを更新しました。 –

+0

エリックのおかげで、ありがとう!それも動作します – RMcNairn

関連する問題