ActiveAdmin で日付カラムのデフォルトを datepicker にする方法

Published at: 2021/04/27

問題

ActiveAdmin では、日付カラムはデフォルトでは :date_select が利用され、結果として年/月/日のフィールドが別々になってしまう。

form do |f|
  f.semantic_errors
  f.inputs do
    f.input :some_date, as: :datepicker
    f.input :other_field
    # ...
  end
  f.actions
end

と、 as: :datepicker を付与すれば datepicker が利用可能なものの、デフォルトの挙動を再現するには上のような記述をいちいち行なう必要があり、大体のユースケースである「何か良い感じにモデルだけ指定して後はよろしくやってほしい」ができていないので、これをどうにかしたいと考えた。

解決

config/application.rb に以下のように記述を行い、パッチを当てる。

Bundler.require(*Rails.groups)

# パッチ開始

module ActiveAdminFormBuilderPatch
  def default_input_type(*_args, **_kwargs)
    ret = super
    ret == :date_select ? :datepicker : ret
  end
end

ActiveAdmin::FormBuilder.include ActiveAdminFormBuilderPatch

# パッチ終わり

module MyApp
  class Application < Rails::Application
    # config.hoge = ....
  end
end

結果

スクリーンショット

date なカラムはデフォルトで :datepicker になった。

tags: railsactiveadmin