Ruby on Rails数字输入验证与格式一致性问题求助
Ruby on Rails ActiveAdmin 数字字段格式问题解决方案
一、修复后台索引页的科学计数法显示问题
修改ActiveAdmin的index代码,对single_coin_worth字段做格式化输出,确保无论数值大小都以普通小数形式展示:
index do selectable_column column :id column :transaction_type # 格式化数值为普通小数,precision设置足够大以保留所有输入的小数位 column "Single Coin Worth($)" do |coin_setting| number_with_precision(coin_setting.single_coin_worth, precision: 10, strip_insignificant_zeros: false) end actions defaults: false do |coin_setting| item "Show", admin_setting_path(coin_setting), class: "member_link" item "Edit", edit_admin_setting_path(coin_setting), class: "member_link" end end
precision: 10:设置足够精度覆盖可能的输入小数位数,可按需调整strip_insignificant_zeros: false:保留末尾的零,保证显示格式和输入完全一致
二、限制表单输入框内容(禁止科学计数法、仅允许数字和小数点)
修改ActiveAdmin表单代码,通过HTML属性和JavaScript限制输入行为:
form do |f| f.semantic_errors *f.object.errors[:base] f.inputs do f.input :single_coin_worth, { required: true, min: 0, max: 100000, input_html: { # 正则验证输入格式:仅允许数字和小数点 pattern: "^\\d+(\\.\\d+)?$", # 禁止输入e、E、+、-等触发科学计数法的按键 onkeydown: "return event.keyCode !== 69 && event.keyCode !== 101 && event.keyCode !== 189 && event.keyCode !== 109 && event.keyCode !== 187 && event.keyCode !== 107", # 输入不合规时的提示文本 title: "请输入有效的数字(仅允许数字和小数点)", # 编辑时确保显示普通小数而非科学计数法 value: f.object.single_coin_worth.present? ? number_with_precision(f.object.single_coin_worth, precision: 10, strip_insignificant_zeros: false) : "" } } f.input :transaction_type, as: :select, collection: ['purchase', 'withdrawl'] f.actions end end
三、加强模型层验证,确保输入格式合规
合并优化模型验证规则,新增格式验证确保输入为合法小数:
validates :single_coin_worth, presence: true, numericality: { greater_than: 0, less_than_or_equal_to: 1 }, format: { with: /\A\d+(\.\d+)?\z/, message: "必须是有效的数字格式(仅允许数字和小数点)" } validates :transaction_type, presence: true, inclusion: {in: ['purchase', 'withdrawl']}
- 合并多个
numericality验证为一个,代码更简洁 format验证通过正则彻底禁止科学计数法格式的输入
内容的提问来源于stack exchange,提问作者Amit K
相关产品推荐
相关产品推荐

