###前提・実現したいこと
フリーワード検索でスペースを利用した複数ワード検索をand条件で検索したいです。
(例)新宿営業支店 野呂
↑新宿営業支店に所属している野呂さんを検索する場合
###該当のソースコード
users_controller.rb
1def search 2 words = params[:q].delete(:lastname_or_firstname_or_lastname_kana_or_firstname_kana_or_email_or_section_name_or_offices_name_cont) 3 if words.present? 4 params[:q][:groupings] = [] 5 words.split(/[ ]/).each_with_index do |word, i| #全角空白と半角空白で切って、単語ごとに処理します 6 params[:q][:groupings][i] = { lastname_or_firstname_or_lastname_kana_or_firstname_kana_or_email_or_section_name_or_offices_name_cont: word } 7 end 8 end 9 @q = User.search(search_params) 10 @users = @q.result(distinct: true).order(id: :desc).page(params[:page]) 11end 12 13def search_params 14 params.require(:q).permit( 15 :lastname_or_firstname_or_lastname_kana_or_firstname_kana_or_email_or_user_id_or_section_name_department_name_or_division_name_or_position_name_or_offices_name_cont, 16 {:offices_id_in => [], :section_id_in => [], :department_id_in => [], :division_id_in => [], :position_id_in => []} 17 ) 18end
###試したこと
非常に不恰好ですが、以下のコードで動いてはいます。
しかし、.deleteしているため?検索後のフリーワードのinputに検索値が入りません。
また、手探りのコードで非常に不恰好のような気がしています。
スッキリできるコードの書き方があれば、そちらも助言いただければ幸いです。
users_controller.rb
1def search 2 if params[:q][:lastname_or_firstname_or_lastname_kana_or_firstname_kana_or_email_or_user_id_or_section_name_or_department_name_or_division_name_or_position_name_or_offices_name_cont].nil? 3 @q = User.search(search_params) 4 @users = @q.result(distinct: true).order(id: :desc).page(params[:page]) 5 else 6 words = params[:q].delete(:lastname_or_firstname_or_lastname_kana_or_firstname_kana_or_email_or_user_id_or_section_name_or_department_name_or_division_name_or_position_name_or_offices_name_cont) 7 if words.present? 8 params[:q][:groupings] = [] 9 words.split(/[ ]/).each_with_index do |word, i| #全角空白と半角空白で切って、単語ごとに処理します 10 params[:q][:groupings][i] = { lastname_or_firstname_or_lastname_kana_or_firstname_kana_or_email_or_user_id_or_section_name_or_department_name_or_division_name_or_position_name_or_offices_name_cont: word } 11 end 12 end 13 @q = User.ransack(params[:q]) 14 @users = @q.result(distinct: true).order(id: :desc).page(params[:page]) 15 end 16end
###補足情報(言語/FW/ツール等のバージョンなど)
Rails (5.1.2)
ransack (1.8.4)
■参照URL
https://qiita.com/asukiaaa/items/a877534b8155819e22a9
delete メソッドを使っている意図が掴めませんでした、その理由はなんですか? (dup メソッドを挟まないのですか?)
回答1件
あなたの回答
tips
プレビュー