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