【Rails】Ransackで年度を検索する方法
はじめに
Ransackには、カスタム述語という機能があり、複雑な検索条件を自分で作成することができます。
今回、年度を検索する必要があり、カスタム述語を使ってみましたので記憶に残すためにアウトプットしたいと思った次第です。
前提
- 年度始まりは固定ではない
- view側で指定するのは2019,2020などの数字
view側(slimです)
= f.select :●●_fiscal_year, 年度の配列, {:include_blank => true}
カスタム述語は、eqやcontのように、カラム名_述語名
の形で使用します
年度の配列は、[2018,2019,2020]
のように数字の配列になっています
config/initializers/ransack.rb
Ransack.configure do |config| term_start_date = ●● # 期始まりの日付取得 # 年度検索 config.add_predicate 'fiscal_year', arel_predicate: 'between', formatter: proc { |v| term_start_date.change(year: v.to_i)..term_start_date.change(year: v.to_i).since(1.year).ago(1.day).to_date }, type: :string # 検索条件として選択された値の型 end
以上になります。