如何在不重写创建表单的情况下在ActiveAdmin中使用datepicker?

时间:2018-06-09 00:56:38

标签: ruby-on-rails-5 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

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

2 个答案:

答案 0 :(得分:1)

我设法修改了 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

答案 1 :(得分:0)

我使用了 activeadmin_addons,它做了很多有用的事情,包括使用 DateTimePicker for input,但没有使用过滤器。

为了获得过滤器,我使用 active_admin_datetimepicker 使 jQuery DateTimePicker 可用于输入 (:date_time_picker) 和过滤器 (:date_time_range)。然后我修改了 ActiveAdmin 以默认使用它。

# config/initializers/active_admin.rb

# Make the default filter type for a DateTime to be the DateTimeRange picker.
class ActiveAdmin::Filters::FormBuilder
  protected

    alias_method :original_default_input_type, :default_input_type

    def default_input_type(method, options = {})
      case column_for(method)&.type
      when :datetime
        return :date_time_range
      end

      original_default_input_type(method, options)
    end
end