ご覧いただきありがとうございます。現在複数のキーワードで検索を行える機能を作っていますが、絞り込みができるようにしたいです。例えば、以下のようなデータがあった場合、
'りんご', 'ぶどう', 'みかん'
間にスペースを空けて**「り ん」と検索をすると、'りんご'と'みかん'が検索結果に反映されます。
これを'りんご'**だけを結果として取得できるように、絞り込みをしたいです。
以下のコードをどのように変更すれば可能でしょうか?
ご教授お願いいたします。(_ _)
ruby
1 @keywords = params[:keyword].split(/[[:blank:]]+/).compact 2 q = {m: 'and'} 3 q[:g] = {} 4 q[:g]["1"] = {m: 'or'} 5 q[:g]["1"][:g] = {} 6 target_keys = [:content, :categories, :types] 7 target_keys.each_with_index do |key, i| 8 @keywords.each.with_index do |keyword, j| 9 this_index = i * target_keys.count + j 10 q[:g]["1"][:g]["#{this_index}"] = {key.to_s + "_cont" => keyword} 11 end 12 end 13 @search = Post.search(q)
コードの雰囲気的に gem ransack を使っているものと思われますが、ransack のドキュメントは読まれましたか?
https://github.com/activerecord-hackery/ransack#grouping-queries-by-or-instead-of-and
答えをそのまま教えるのは簡単ですが、意味もわからずコピペしても tamm さんのためになりませんし、 teratail の方針にも反してしまいます。
実際に調査や作業に取り組んだ上での具体的な質問でないと答えづらいです。
例えばですが、
【1】間にスペースを空けて「り ん」と検索をしたとき、検索条件の "り ん" という文字列がどの変数に格納されているか調べる
【2】Post.search(q) の変数「q」が、現時点でどういうデータ構造になっているか調べる
【3】変数 q のデータ構造をどう変えれば 'りんご' だけを取得できるようになるか調べる
【4】そのデータ構造を作るにはどういうコードを書けばいいか考える
みたいな感じで進めてみてはどうでしょう
つまづいたら、そのとき改めて相談してください。(今よりも具体的な質問になるかと思います)
あなたの回答
tips
プレビュー