首页 > 解决方案 > 如何在 ActiveAdmin 中使用日期选择器而不重写创建表单?

问题描述

我的 ActiveAdmin 模型创建表单(即/admin/<model>/new)使用一组尴尬的日期和日期时间下拉列表。

我想改用选择器。但是我发现的所有关于使用日期时间选择器的文档似乎都需要重写整个表单。似乎没有办法只更改一个输入,也没有等效的preserve_default_filters!.

我想更改所有日期和日期时间列的默认值,例如...

config.datepicker = ...

或每列,如...

column :signed_up, as: :datetime_picker

编辑

默认情况下,我会得到与此等效的新表单和编辑表单。

form do |f|
  f.semantic_errors
  f.inputs
  f.actions
end

如果我想更改signed_up为使用日期选择器,我必须重复默认提供的所有列,只是为了更改一列的输入类型。

ActiveAdmin.register Thing do
  form do |f|
    t.semantic_errors
    t.input :name
    t.input :this
    t.input :that
    t.input :signed_up, as: :datepicker
    t.input :other
    t.input :thing
    t.input :left
    t.input :right
    t.actions
  end
end

这是很多不必要的重复,而且格式不正确。我正在寻找一种方法来更改一列或一种类型的输入表示,而不必每次都手动编写整个表单。

标签: ruby-on-rails-5activeadmin

解决方案


我设法对 Active Admin 行为进行修补,以使用:datepicker而不是:date_select.

在您的config/application.rb中,添加以下补丁

Bundler.require(*Rails.groups)

// Start patch

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

ActiveAdmin::FormBuilder.include ActiveAdminFormBuilderPatch

// end patch

module YourApp
  class Application < Rails::Application
    // configs
  end
end

笔记

确认这适用于 activeadmin 版本2.9.0


推荐阅读