simple_form 在任何整数属性的输入字段上生成“type='number'”,而不是 type='text'。由于这会导致 Chrome 显示计数器控件,我宁愿让它只使用 type='text' 作为数字的默认值。
似乎可以覆盖 config/initializers/simple_form.rb 中的默认值,但是从文档中不清楚如何准确地做到这一点。将数字列/属性设置为呈现为 type='text' 的语法是什么?
simple_form 在任何整数属性的输入字段上生成“type='number'”,而不是 type='text'。由于这会导致 Chrome 显示计数器控件,我宁愿让它只使用 type='text' 作为数字的默认值。
似乎可以覆盖 config/initializers/simple_form.rb 中的默认值,但是从文档中不清楚如何准确地做到这一点。将数字列/属性设置为呈现为 type='text' 的语法是什么?
You can override the default mapping on a per-field basis by specifying an input type:
<%= f.input :age, as: :string %>
(The full list of mappings is here.)
But if you want to eradicate numeric inputs from your project, try:
# config/initializers/simple_form.rb (before/after the SimpleForm.setup block, if this exists)
module SimpleForm
class FormBuilder < ActionView::Helpers::FormBuilder
map_type :integer, :decimal, :float, to: SimpleForm::Inputs::StringInput
end
end
作为记录:
SimpleForm::Inputs::DateTimeInput.class_eval do
def use_html5_inputs?; input_options[:html5] || true end
end
如果您要使用像bootstrap-datetimepicker这样的日期时间选择器,这很有用:
SimpleForm::FormBuilder.class_eval do
def input(attribute_name, options = {}, &block)
options = @defaults.deep_dup.deep_merge(options) if @defaults
input = find_input(attribute_name, options, &block)
# Add native DB type as CSS class so inputs can be filtered by that
input.input_html_classes << input.column&.type
# Use another attribute:
# input.input_html_options[:'data-db-type']= input.column&.type
wrapper = find_wrapper(input.input_type, options)
wrapper.render input
end
# map_type :date, :time, :datetime, to: SimpleForm::Inputs::StringInput
alias old_default_input_type default_input_type
def default_input_type(attribute_name, column, options)
if column.type.in? %i(date time datetime)
:string
else
old_default_input_type(attribute_name, column, options)
end
end
end
map_type
不需要。