2017-01-22 20 views
0

私は私たちの製品を返す検索フォームを持っています。しかし、ユーザーが特定の単語(この例では 'color')を含む文字列を入力すると、あまりにも多くの商品が返されます。バックエンドで検索されるクエリの文字列 'color'を削除しようとしていますが、フロントエンドテンプレートの@unfiltered_queryを参照できるように、元のクエリの文字列を@unfiltered_queryとして保持しています。インスタンスが検索フォームに保存されないのはなぜですか?

if query.include? "color" 
    @unfiltered_query = query 
end 
query.slice! "color" 
values = query.split 
binding.pry 

これは機能していなかったので、何が起こっていたのか調べるために走り回った。このフォームでは、「赤い塗料の色」を検索しました。私が@ unfiltered_queryを呼び出して呼び出すと、.sliceの前にメソッドを作成していても、 "Red paint"が出力されます。名前は?

私には何が欠けていますか?

ありがとうございました!

p.s.私はインスタンスを参照するために使用しているHTMLテンプレートには、次のとおりです。

<div class="search-input"><h2> 
    <% if @unfiltered_query.present? %> 
     <%= @unfiltered_query.titleize %> 
    <% else %> 
     <%= query.titlelize %> 
    <% end %> 
</h2></div> 

答えて

1

あなたはこのようにしてみてくださいことができます:

if query.include? "color" 
    @unfiltered_query = query.dup 
end 
query.slice! "color" 
values = query.split 
binding.pry 

これは参照渡しに起因する可能性があります。

+0

これは完璧に機能しました!参照渡しとは何ですか?ありがとうございました!!! – user3247042

+0

'query'の値をコピーして' @ unfiltered_query'に代入するのではなく、 '@ unfiltered_query'は' query'への参照を持ちますので、どちらか一方を変更するともう一方に反映されます同じように。 –

+0

ああ、今、@unfiltered_queryはフロントエンドで呼び出されていません。フロントエンドテンプレートで使用できるようにするために何かする必要がありますか? – user3247042

関連する問題