ransackにより検索機能を実装しようとしているのですが、特定のカラムに関してうまく検索ができない状態になっております。調べてみたのですがうまく改善できない為アドバイスなど頂けたらと思います。
[43] pry(main)> Spree::Product.ransack(name_cont: "bac").result => Spree::Product Load (1.0ms) SELECT `spree_products`.* FROM `spree_products` WHERE `spree_products`.`deleted_at` IS NULL AND `spree_products`.`name` LIKE '%bac%' []
Spree::Product
のname
カラムに関しては検索が正常に行われるのですが、
[51] pry(main)> Spree::Product.ransack(description_cont: "abc").result => Spree::Product Load (1.2ms) SELECT `spree_products`.* FROM `spree_products` WHERE `spree_products`.`deleted_at` IS NULL
description
カラムに関しては検索が正常に行われません。
name
はstring
型でdescription
はtext
型なのでそこでうまく処理が行われていないのでは?と思って調べていますがいい結果が得られません。
text
型だと特別な手順が必要なのでしょうか?
参照記事やアドバイスなど頂けたらと思います。
---追記------------------------------------------↓
わかりにくくてすみません。
検索条件がうまく渡されないのを改善したいと考えております。
[65] pry(main)> Spree::Product.where("description LIKE ?", "%BBB%") => Spree::Product Load (1.2ms) SELECT `spree_products`.* FROM `spree_products` WHERE `spree_products`.`deleted_at` IS NULL AND (description LIKE '%BBB%') [] [66] pry(main)> Spree::Product.where("name LIKE ?", "%BBB%") => Spree::Product Load (1.8ms) SELECT `spree_products`.* FROM `spree_products` WHERE `spree_products`.`deleted_at` IS NULL AND (name LIKE '%BBB%') [] [67] pry(main)> Spree::Product.ransack(name_cont: "AAA").result => Spree::Product Load (1.2ms) SELECT `spree_products`.* FROM `spree_products` WHERE `spree_products`.`deleted_at` IS NULL AND `spree_products`.`name` LIKE '%AAA%' [] [68] pry(main)> Spree::Product.ransack(description_cont: "AAA").result => Spree::Product Load (3.2ms) SELECT `spree_products`.* FROM `spree_products` WHERE `spree_products`.`deleted_at` IS NULL
65,66行目に関しては直接LIKE
検索をすると正常に検索が行われるのですが、
66,67行目に関してransackを使用すると、name
は問題なく検索が行われ、description
に関してはうまく検索が行われません。
お手数ですが確認お願い致します。
erb
1<li class="dropdown searchBox"> 2 <%= link_to "javascript:void(0)", class: "dropdown-toggle", 'data-toggle': :dropdown do %> 3 <i class="fa fa-search"></i> 4 <% end %> 5 <ul class="dropdown-menu dropdown-menu-right"> 6 <%= form_with url: potepan_products_search_path, id: "form01", method: :get, local: true do |form| %> 7 <li> 8 <span class="input-group"> 9 <%= form.text_field "searchWord", class: "form-control", placeholder: "Search…", 'aria-describedby': "basic-addon2" %> 10 <span type="btn" class="input-group-addon addPointer" id="basic-addon2">検索 </span> 11 </span> 12 </li> 13 <% end %> 14 </ul> 15</li> 16
controller
1def search 2 @searchWord = params[:searchWord] 3 searched_products = Spree::Product.ransack(description_cont: params[:searchWord]).result.includes(variants_including_master: %i[images prices]) 4 @products = searched_products 5 end
ちなみにコントローラーのdescription_cont
をname_cont
とした場合には正常な動作を確認しております。合わせて確認いただけたらと幸いです。
回答1件
あなたの回答
tips
プレビュー