simple_form在输入字段上为任何整数属性生成“type ='number'”,而不是type ='text'。由于这会导致Chrome显示计数器控件,我宁愿使用type ='text'作为数字的默认值。
似乎可以覆盖config / intializers / simple_form.rb中的默认值,但是从文档中不清楚如何完全执行此操作。将数字列/属性设置为type ='text'的语法是什么?
答案 0 :(得分:12)
您可以通过指定输入类型来覆盖每个字段的默认映射:
<%= f.input :age, as: :string %>
(映射的完整列表是here。)
但是如果你想根除项目中的数字输入,请尝试:
# 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
答案 1 :(得分:0)
记录:
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
不需要。