ransackでRailsアプリに入力フォームを追加する
はじめに
人は楽をすれば楽をしただけ、より楽をしたくなる生き物です。MVCの仕組みのおかげで、比較的容易にデータベースへのアクセスをUIまで持って行けているRailsですが、それでも入力フォームの作成を面倒に思う日があります。
そういう時に便利なのがransackです。
実装
ransackをインストールします。
gem install ransack
ransackではfrom_forの代わりにsearch_form_forというヘルパーメソッドを利用します。simple_formを利用している場合には、以下の通りconfig/application.rbに設定を行う必要があります。
require_relative 'boot'
ENV['RANSACK_FORM_BUILDER'] = '::SimpleForm::FormBuilder' # <= ADD!
require 'rails/all'
これでransackの利用準備は万全です。
とにかく楽をしたいので、今回はsimple_formを利用します。
上記ではPostモデルの#title, #content, #folder.nameを対象として、検索フォームを作成しております。親子関係にあるモデルの要素までアクセスできるのが素敵ですね。
今回は*_orと*_contしかマッチャーを利用しておりませんが、ransackには他にも色々なマッチャーが存在します。参考(Search Matchers)
また、リソースのアクセス制限は、ransackable_associationsというメソッドを上書きすることで変更するのが、本家としてはオススメだそうです。参考(Authorization (whitelisting/blacklisting))
(上記は一部抜粋)
punditなどを利用してリソースにアクセス制限を掛けている場合は、こちらも併せて設定する必要があるかもしれません。