2016-03-20 15 views
2

私のアプリには2つのメインモデル「ビジネス」と「カテゴリ」があります。私は現在、うまく動作する検索のtext_fieldを持っていますが、利用可能なカテゴリを含むcollection_selectに基づいて特定のカテゴリに属しているビジネスを検索する機能も実装しようとしています。collection_selectを使用してbelongs_toをsearchkick gemで検索するにはどうすればよいですか?

私はcollection_selectを使用していますが、選択したカテゴリに属しているビジネスを表示する方法を見つけることができません。ここで

は私のビジネスのコントローラ内の検索情報である:

def search 
    if params[:search].present? 
     @businesses = Business.search(params[:search]) 
    else 
     @businesses = Business.all.paginate(page: params[:page], per_page: 6) 
    end 
    end 

マイ検索フォーム:

<%= form_tag search_businesses_path, method: :get, role: "search", :class => "search" do %> 
    <%= label :category, "Search By Business Name" %> 
    <%= text_field_tag :search, params[:search], id: "search", :placeholder => 'Search Business' %> 
    <%= button_tag(type: 'submit', class: "button") do %> 
     <i class="fa fa-arrow-right"></i> 
    <% end %> 
<% end %> 

そして、私の現在のカテゴリのコレクションを選択:

<%= form_for :category do |f| %> 
    <%= f.label :category, "Search By Category" %><br> 
    <%= f.collection_select :category_id, Category.all.order('name ASC'), :id, :name %> 
    <%= button_tag(type: 'submit', class: "button") do %> 
     <i class="fa fa-arrow-right"></i> 
    <% end %> 
<% end %> 

私が知っていることを私はコレクションを選択すると、ビジネスを表示する必要があることを選択する必要がありますが、私はどのようにプロップするかを理解できないようですそれをうまく実装する。

UPDATE

私は、次のコードを試してみましたが、何も結果が表示されない:

マイビジネスモデル

def search_data 
    { 
     name: name, 
     category_id: category_id 
    } 
end 

マイビジネスコントローラー

def search 
    if params[:search].present? 
     @businesses = Business.search "apples", where: { category_id: params[:category_id] } 
    else 
     @businesses = Business.all.paginate(page: params[:page], per_page: 6) 
    end 
    end 

マイフォーム

<%= form_tag search_businesses_path, method: :get, role: "search", :class => "search" do %> 
    <%= label :category, "Search By Category" %> 
    <%= collection_select :search, params[:category_id], Category.all.order('name ASC'), :id, :name %> 
    <%= button_tag(type: 'submit', class: "button") do %> 
     <i class="fa fa-arrow-right"></i> 
    <% end %> 
<% end %> 
+0

'params'を確認しましたか? 'params [:category_id]'は存在しますか?あるいは 'params [:search]'の中に入っていますか?あなたが受け取る 'params'をチェックして投稿するだけです。 – Deep

+0

'<%= collection_select:search、params [:search]、category.all.order( 'name ASC')、:id、:name%>' に変更パラメータを指定すると、結果は表示されませんどちらか。 – ZMoodie

+0

私は周りを遊んだ後、私はほとんどの場合、正しいビジネスを表示することができましたが、いくつかのカテゴリは正しいビジネスをトップに示し、その下にいくつかの他のビジネスをリストしています。私がこれを実現させる唯一の方法は 'ビジネスを維持することです。<%= collection_select:search、params [:category_id]、Category.all.order( 'name ASC')、:id、:nameを検索する(params [:search]) ' %> 'そうでなければ何も表示されません。 – ZMoodie

答えて

0

は、このあなたのために動作します:

def search_data 
    { 
    name: name, 
    category_id: category_id 
    } 
end 

または私はあなたがあまりにも(わからない)、これを書くことができると思う::だからcategory: category.name

Businessモデルで

は、このメソッドを定義しますこれでcategoryのインデックスが作成され、コントローラで次のように検索することができます:

あなたの formに応じ
Business.search "apples", where: { category_id: params[:category_id] } 

またはcategory.name作品であれば、その後{ category: params[:category] }

変更。

+0

私はいくつかの異なる方法であなたの提案を試みましたが、結果もまたはいくつかの一見ランダムなものが表示されます。 – ZMoodie

+0

試したコードを投稿できますか? – Deep

+0

上記のコードを更新しました。 – ZMoodie

関連する問題