2017-11-16 18 views
1

は私がレストランや食事のために検索し、カテゴリ(フランス料理、インド、足など)検索バー+ selectタグは

のindex.htmlでフィルタリングすることができるようにする検索バー+ドロップダウンリストを持っているレール。 ERB

<%= form_tag meals_path, method: 'get', id: 'products_search' do %> 
    <p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= select_tag :search_category, options_for_select(@categories, @categories[0]) %> 
    <%= submit_tag "Rechercher", name: nil %> 
    </p> 
<% end %> 

meals_controller.rb

@meals_search = @meals.search(params[:search], params[:search_category]) 

モデル/ meal.rb

def self.search(search, search_category) 
    if search 
    if search && search_category == "All" 
    where('name LIKE ?', "%#{search}%") 
    elsif search == "" && search_category != "All" 
     where('category = ?', "%#{search_category}%") 
    else 
     where('name LIKE ? AND category = ?', "%#{search}%", "%#{search_category}%") 
    end 
    else 
    all 
    end 
end 

検索バーは完全に機能しますが、カテゴリフィルタ(search_category)は機能しません。私は実際に空のリストを取得しますが、少なくとも1つのレストランや食事があるカテゴリでのみフィルタリングできます(リストは空にできません)。

where('category = ?', search_category) 

01へ

where('name LIKE ? AND category = ?', "%#{search}%", search_category) 

where('category = ?', "%#{search_category}%") 

where('name LIKE ? AND category = ?', "%#{search}%", "%#{search_category}%") 

を変更する

+0

'where( 'category =?'、search_category)'を試すことができますか?また、どのデータ型がカテゴリですか? – Aakanksha

+0

フォーム送信時にparamsを投稿できますか? – SRack

+0

質問には従いませんでしたが、 '=='が '&& 'より優先されます。 – marmeladze

答えて

2

OKを並べ替え、@vishnuprakashの提案を以下、私は私の問題を解決するために掻き回すの宝石を使用しました。

は、その後、私は私のindex.html.erbにこのフォームを作成しました:

<%= search_form_for @q do |f| %> 

    <%= f.search_field :name_cont %> 

    <%= f.select :category_eq, options_for_select(@categories), include_blank: true %> 

    <%= f.submit %> 
<% end %> 

とmeals_controller.rb:

@q = @meals.ransack(params[:q]) 
     @meals_search = @q.result(distinct: true) 

私は、以前のモデル/食事で作成した関数を処分しました。 rb。

これで完全に機能します。似たような問題がある場合は、the ransack dockをご覧ください。あなたは私にもDMをすることができます、私は喜んで助けてくれるでしょう。

0

てみてください構文はLIKEでのみ動作し、=では動作しません。私は私のGemfilegem 'ransack'を追加

bundleを実行しました:

+0

それは動作しません、私はまだ空のリストを取得します。 –

+0

それでは、おそらく 'どこの名前が好きですか? '、"%#{search}% "、"%#{search_category}% ")' – Szymon

+0

まだ空です! –

2

ちょうど高度な検索のために、掻き回す使うので

+0

私はそれを見てフィードバックを与えるつもりです。 –