91s

プログラミング関係、日記などを書きます

【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

以上になります。

参考文献:Ransackで簡単に検索フォームを作る73のレシピ - 猫Rails