You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:12:47