LoginSignup
45
46

More than 5 years have passed since last update.

railsで複数の単語を複数のカラムに対して検索する方法

Last updated at Posted at 2014-09-01

利用例

userがaddressとnameを持っていて、「博多 田中」で検索したら「博多の田中さん」に該当するグループを出力したい場合。

実装方法

ransackを使います

Gemfile
  gem 'ransack'
app/views/users/index.html.erb
<%= search_form_for @q, url: users_path do |f| %>
  <%= f.text_field :search_words %>
  <%= f.submit 'Search' %>
<% end %>
app/controllers/users_controller.rb
def index
  words = params[:q].delete(:search_words) if params[:q].present?
  if words.present?
    params[:q][:groupings] = []
    words.split(/[  ]/).each_with_index do |word, i| #全角空白と半角空白で切って、単語ごとに処理します
      params[:q][:groupings][i] = { name_or_address_cont: word }
    end
  end
  @q = User.ransack(params[:q])
  @users = @q.result(distinct: true)
end

注意点

groupingsというキーに入れることが重要です。
名前が違うと期待通り動作しません。

以上、誰かのお役に立てれば幸いです。

参考

multiple word column ransack searchなどで検索しました。
https://github.com/activerecord-hackery/ransack/issues/85
https://github.com/activerecord-hackery/ransack

45
46
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
46