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などを利用してリソースにアクセス制限を掛けている場合は、こちらも併せて設定する必要があるかもしれません。

Rails

Posted by poison