【Rails】gem ransackを使用した検索機能追加

Ruby on Railsアイキャッチ画像

gem ransackの導入手順まとめ

インストール

gem 'ransack'

controller

def index
  @products = Product.all
end

これを以下に書き換え

def index
  @q = Product.ransack(params[:q])
  @products = @q.result(distinct: true)
end

view

<h1>プロダクト検索</h1>
<%= search_form_for @q, url: homes_path do |f| %>
  <%= f.label :name, 'プロダクト名' %>
  <%= f.search_field :name_cont %>
  <br>
  <%= f.submit '検索' %>

  <br>

  <%= sort_link(@q, :name, "Name_sort") %>
<% end %>

これだけ!簡単!

疑問点

変数はqじゃないといけないのか?

試しにrでやってみたけどダメだった。

result(distinct: true)

distinctメソッドとは、内部的にはSQLのDISTINCTコマンドを呼び出し、重複レコードを1つにまとめるためのメソッド

url: homes_path

これは検索後に飛ぶページ

_cont

ransackで用意されている検索したワードが含まれているレコードを取得するためのメソッド。
_の前に、検索したいカラム名を入れる。
name_contの場合は、入力されたワードでnameカラムに対してあいまい検索されている。
この部分を変更して、いろいろな形式の検索ができる。

コメント