###前提・実現したいこと
複数のカラムに対して、スペース区切りに入力された、文字に基づき、検索できるようにしたい。
###発生している問題・エラーメッセージ
リンク
###該当のソースコード
header/view
ruby
1<%= search_form_for @search,url:users_path,class:"form-group navbar-form navbar-left" do |f| %> 2 <div class="input-group"> 3 <%= f.label :keywords, t('helpers.keywords'), class: 'control-label'%> 4 <%= f.text_field :keywords,required:false, value: params.dig(:q, :keywords),:placeholder => "キーワード", class: 'form-control'%> 5 <span class="input-group-btn"> 6 <%= button_tag class: "btn btn-default" do %> 7 検索<%= content_tag :i ,"",class: "glyphicon glyphicon-search" %> 8 <% end %> 9 </span> 10 </div> 11 <% end %>
controller
ruby
1 def index 2 @words = params[:tag].present?? Word.tagged_with(params[:tag]) : Word.all 3 @words =@words.all.includes(:tags) 4 #@search = @words.ransack(params[:q]) 5 @search =@words.with_keywords(params.dig(:q, :keywords)).ransack(params[:q]) 6 @words_result = @search.result #この行を修正 7 @words_result = @words_result.uniq 8 respond_to do |format| 9 format.html 10 format.json { render json: @words_result} 11 end 12 end
model
ruby
1scope :with_keywords, -> keywords { 2 if keywords.present? 3 columns = [:name, :word] 4 where(keywords.split(/[[:space:]]/).reject(&:empty?).map {|keyword| 5 columns.map { |a| arel_table[a].matches("%#{keyword}%") }.inject(:or) 6 }.inject(:and)) 7 end 8 } 9
###補足情報
このリンクを基に実装
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。