如何在ActiveAdmin全局将numeric(12,2)字段改为type="text"并添加float-field类
当然可行!用猴子补丁轻松搞定全局修改
完全可以实现全局把numeric(12,2)(对应Rails里的:decimal类型字段)渲染为type="text"的输入框并添加float-field类,猴子补丁是个直接有效的方案。核心思路是修改Formastic对Decimal类型字段的默认渲染逻辑,具体步骤如下:
1. 创建猴子补丁文件
在你的Rails项目的config/initializers目录下新建一个文件,比如formastic_decimal_input_patch.rb,写入以下代码:
module Formastic module Inputs class DecimalInput < NumberInput def input_html_options # 合并原有HTML选项,替换type为text,添加float-field类 base_options = super base_options.merge( type: "text", class: [base_options[:class], "float-field"].compact.join(" ") ) end end end end
2. 代码说明
- Formastic默认会把Rails的
:decimal类型字段(也就是你数据库里的numeric(12,2))交给DecimalInput处理,而它继承自NumberInput,默认输出type="number"的输入框。 - 我们重写了
input_html_options方法,把输入框的type强制改成text,同时将float-field类合并到原有class列表中(避免覆盖ActiveAdmin或Formastic自带的类)。
3. 生效验证
保存文件后重启你的Rails服务器,打开ActiveAdmin对应的表单页面,查看numeric(12,2)字段的输入框元素:
- 应该能看到
type="text"属性 - class属性里包含
float-field
这样就完成了全局的修改,所有这类字段都会按照你的需求渲染啦~
内容的提问来源于stack exchange,提问作者Evmorov
相关产品推荐
相关产品推荐

