允许在数字字段中使用逗号

2024-01-18

这是一个非常愚蠢的问题,我觉得我一定错过了一些简单的事情。我有一个表格quantity场地。人们在输入数量时不断输入逗号(例如,他们输入12,000表示一万二千)所以我想在保存数量之前去掉逗号(12000在示例中)转换为数据库中的整数列。

到目前为止我已经尝试了两种方法。按照建议重写 setter 方法在这个问题中 https://stackoverflow.com/q/6541864/574190

  def quantity=(num)
    num.gsub!(',', '') if num.is_a?(String)
    self[:quantity] = num.to_i
  end

这在某种意义上是有效的。如果我输入12,000在数量字段中并提交表格,我得到12000在数据库中。问题是它也绕过了所有quantity验证。例如,我不再可以验证数量值的存在。不是很好。

我还尝试使用验证前回调(而不是覆盖设置器):

  before_validation :sanitize_quantity

  def sanitize_quantity
    # Doesn't wok because quantity.to_i already called by this point.
  end

这不起作用,因为当数量达到回调方法时,Rails 已经调用了to_i在上面。这意味着12,000将被截断为12当它到达回调时。再一次,不好。

除了在客户端删除逗号之外,我还能尝试什么?

最后一点,我知道这本质上是一件愚蠢的事情,因为某些国家以不同的方式使用句号和逗号。无论如何我仍然需要这样做。


使用类型强制

如果我正确理解你的问题,那么你正试图将字符串强制转换为数字。如果是这样,您可以使用显式强制转换,如下所示:

validates :quantity, presence: true, numericality: true

def quantity=(num)
  self[:quantity] = num.to_s.scan(/\b-?[\d.]+/).join.to_f
end

测试和示例

看看这是如何工作的,您可以在控制台尝试以下操作。

# String as input.
number = '12,956.05'
number.to_s.scan(/\b-?[\d.]+/).join.to_f
=> 12956.05

# Float as input.
number = 12956.05
number.to_s.scan(/\b-?[\d.]+/).join.to_f
=> 12956.05

# Using an ActiveRecord object.
q = Quantity.new quantity: '12,956.05'
=> #<Quantity id: nil, quantity: 12956.05, created_at: nil, updated_at: nil>
q.save
=> true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

允许在数字字段中使用逗号 的相关文章

  • 即使在急切加载之后,belongs_to 关联也会单独加载

    我有以下关联 class Picture lt ActiveRecord Base belongs to user end class User lt ActiveRecord Base has many pictures end 在我的
  • Rails - 渲染:目标锚标记的操作?

    我希望像这样使用渲染 render action gt page form 我也尝试过这个 render template gt site page form 那也没用 这个特定页面上的表单位于最底部 如果提交时发生任何错误 我不希望用户被
  • rvm gem 安装错误?

    我正在摆弄 ruby gems 和 rvm 它工作得很好 但现在当我尝试安装 gem 时出现错误 gem install Rails错误 同时 执行 gem Errno EACCES 权限被拒绝 Users da rvm gems ruby
  • 已定义方法的 Ruby 钩子?

    我一直在谷歌上搜索这个问题 但找不到答案 这让我认为答案是否定的 但我想我会在这里问 以防有人确切知道 Ruby 是否有一个钩子来定义方法 即在模块或类上 如果没有 是否有人足够熟悉该实施的情况main对象以了解它到底如何将方法复制到Obj
  • 如何加载页面特定的rails 4 js文件?

    我正在阅读资产管道的 Rails 指南文档 它指出 CoffeeScript 页面特定生成的文件 如果清单上有 require tree 指令 则默认情况下可供用户使用 这对我不起作用我必须包括这个 在特定控制器上 我缺少什么 资产管道会将
  • 在端口80启动webrick(mysql2 gem问题)

    我正在尝试让我的 webrick 在端口 80 上提供服务 我尝试过 rails server p 80 但访问被拒绝 后来我明白使用端口1 1024需要root权限 所以我尝试了这个 sudo rails server p 80 但是 现
  • Rails Windows Vagrant 响应时间非常慢

    我在跑 Vagrant 1 7 1 Rails 4 1 4 Thin 1 6 1 Windows 7 每个静态文件的发送时间都超过一秒 在我的 PC 上加载一个页面可能需要大约 20 秒 而在同事的 Linux 机器上则只需瞬间 有一些帖子
  • 来自控制器的 Rails 验证

    有一个联系页面 可以输入姓名 电话 电子邮件和消息 然后发送到管理员的电子邮件 没有理由将消息存储在数据库中 问题 如何 在控制器中使用 Rails 验证 根本不使用模型 或者 在模型中使用验证 但没有任何数据库关系 UPD Model c
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 如何使用 net/http 验证 ruby​​ 中的 SSL 证书链

    我如何验证网站的证书 例如https processing ukash com https processing ukash com 在 ruby 中使用 net http https Net HTTP new processing uka
  • Ruby 中的 DateTime.parse() 是否依赖于语言环境?

    我想知道以下示例的输出 解析时01 03 它会被解决为Mar 1st or Jan 3rd Ruby 不依赖于语言环境 因为红宝石是一个服务器端语言而不是客户端像 JavaScript 一样的语言 Ruby 使用系统时钟yourWeb 应用
  • 服务器上的 Rails 会话

    我想让一些 Rails 应用程序在不同的服务器上共享同一个会话 我可以在同一服务器内完成此操作 但不知道是否可以在不同服务器上共享 有人已经做过或者知道怎么做吗 Thanks Use the 数据库会话存储 https github com
  • Ruby 是否有一个 Expect 等效 gem?

    Ruby 是否有一个 Expect 等效 gem 我尝试在 code google 和 ruby gems org 上搜索 但遗憾的是它没有出现 FYI Expect http en wikipedia org wiki Expect是一个
  • Rails/Ruby 合并两个具有相同键、不同值的哈希值

    我有两个想要合并的哈希值 它们看起来像这样 Hello gt 3 Hi gt 43 Hola gt 43 第二个哈希看起来像 Hello gt 4 Hi gt 2 Bonjour gt 2 我想合并这两个哈希数组 使结果看起来像 Hello
  • Shoulda/RSpec 匹配器 - 条件验证

    在我的代码中 我使用 Shoulda 匹配器进行了以下验证 效果很好 it should validate presence of name 在我的模型中 我已将条件添加到验证中 validates presence of name if
  • 带有 OAuth2 的 YouTube API v3:更新和删除失败并出现“权限不足”错误

    我在尝试着update and delete视频使用YouTube API v3 https developers google com youtube v3 docs videos with OAuth2 用于身份验证 https dev
  • 超类与类SpecificationPolicy不匹配

    我得到了一个superclass mismatch for class SpecificationPolicy尝试安装或升级某些brew 软件包时出错 例如 更新安装 supabase CLI 时 brew install supabase
  • 在 Sinatra 中运行后台进程

    我有 Sinatra Rails 应用程序和一个启动一些漫长过程的操作 通常我会为后台作业排队 但这种情况太简单了 后台进程很少启动 所以队列是一个开销 那么如何在没有队列的情况下运行后台进程呢 get build logs project
  • 仅针对 Rake 任务运行初始化程序

    我希望在执行 Rake 任务时运行某个初始化程序 但在运行 Rails 服务器时不运行 区分 Rake 调用和服务器调用的最佳方法是什么 Rake 允许您指定任务的依赖关系 最好的建议操作是将特定于 rake 的初始化放入其自己的任务中 而
  • 将查询字符串参数作为表单发布的一部分发送

    有没有办法捕获查询字符串并将其作为表单帖子的一部分发送 我正在使用 Rails 2 3 5 我的用户所在的页面有多个查询字符串参数 在此页面上 他们将提交一份表格 在接收帖子的操作中 我想知道这些查询字符串参数是什么 显然 它们不是作为邮件

随机推荐

  • Tkinter 滚动条不滚动

    我正在尝试创建一个带有两个画布和一个滚动条的图形用户界面 同时穿过这两个画布 作为另一个项目的测试 我创建了根 两个画布 并使用网格方法将一些标签固定到每个画布上 并创建了滚动条 但是 当我运行该程序时 滚动条会移动 但窗口的内容根本没有改
  • 在 Java 中管理 XAdES 签名的库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个允许创建和验证 XAdES 签名的 Java 库 格式越多越好 XAdES BES XAd
  • 二维unordered_map

    typedef boost unordered map
  • 为什么即使对象指针在多重继承中不同,情况也是一样的?

    当使用多重继承时 C 必须维护多个 vtable 这导致对公共基类有 多个视图 这是一个代码片段 include stdafx h include
  • 具有非静态 lambda 成员的类不能使用默认模板参数吗?

    这个小测试程序 include
  • 通过 .htaccess 从 URL 中删除双斜杠或更多斜杠时出现问题

    我使用以下 htaccess 规则从 Web url 中删除双斜杠或多个斜杠 remove double more slashes in url RewriteCond REQUEST URI RewriteRule 1 2 R 301 L
  • 选定列的高图表不同颜色

    Highcharts 中不同的选定列是否可以有不同的颜色 这是我想做的事情的草图 http jsfiddle net jZmYW 4 http jsfiddle net jZmYW 4 选择一个点 列 时 它应该具有特定的颜色 我尝试通过为
  • XSLT 字符串替换

    我不太了解 XSL 但我需要修复这段代码 我已经减少了它以使其更简单 我收到这个错误 无效的 XSLT XPath 函数 在这条线上
  • Java MVC Web开发框架?

    我想用java开发一个网站 但我在java web开发方面是绝对的初学者 我想使用一个使用 MVC 模式和 Ajax 的框架 我做了一些搜索 发现 Spring 或 Struts 合适 但我不确定 您能推荐一个框架吗 游戏框架 http w
  • .NET - 从非托管数组复制到非托管数组

    我一直在查看 Marshal 类 但似乎找不到允许我从非托管数组 IntPtr 复制到另一个非托管数组 IntPtr 的方法 使用 NET 可以实现这一点吗 您还可以通过 DllImport RtlMoveMemory 来完成工作 DllI
  • 如何使用谷歌翻译应用程序

    我编写了有关字典句子的程序 我希望有功能可以在我的应用程序中转到 谷歌翻译 应用程序 我该如何使用它 我应该导入什么东西吗 据我所知 谷歌翻译 Android 应用程序没有公开任何标准Intent是你可以使用的 很遗憾 但同时也很奇怪 你会
  • Perl 意外行为:croak 与 try catch

    我看到一些异常指向 catch 块本身 参见下面的示例 在我看来 这是一个意想不到的行为 因为它改变了原始异常的位置并使得调试变得困难 应该说在第 13 行处死亡 如果我使用 die confess 或使用 eval 代替 try catc
  • FirebaseApp:Firebase API 初始化失败

    我遇到了由 Firebase Api 引起的错误 这是错误日志 Firebase API initialization failure java lang reflect InvocationTargetException Caused b
  • 哪个 C# 程序集包含 Invoke?

    另一个问题 为什么 VS10 如此热衷于抱怨 Invoke 在我不断追求让我的应用程序工作成为世界上最好的 C 程序员的过程中 我认为线程是一件好事 MSDN 有一篇关于制作的有用文章对控件的线程安全调用 http msdn microso
  • 传递对象时 Axios POST 请求不起作用

    我正在尝试使用 axios 在 vue js 应用程序中向本地 API 发出发布请求 并且响应返回空数据 使用 Postman 工具 API 上的 post 请求工作正常 下面是我的代码 var the data title This is
  • WebClient DownloadString 不返回任何内容

    我想从海盗湾的搜索查询中获取源代码 我的代码中有这个 但它不返回任何内容 WebClient webpage new WebClient string source webpage DownloadString http thepirate
  • FlatList 在添加新数据时重新渲染所有数据

    我测试了 FlatList 这是我想做的 1 使用componentDidmount获取10条初始数据2 向下滚动可获取另外 10 条数据 App js import React from react import View SafeAre
  • 如何防止 Typescript 查看父 node_modules 文件夹

    我在另一个 NPM 包中有一个 NPM 包 子包有一些代码 例如import range from iter tools 即使子 package json 没有依赖项iter tools I am NOT出现任何类型的 Typescript
  • 使用Visual Studio 2010开发nodejs

    是否可以使用VS2010开发NodeJS应用程序 我说的是普通的 Javascript 而不是 Azure 或任何类似的花哨的东西 我只是想使用 VS2010 作为 Javascript 编辑器 因为我有 NET 背景 而且我对它非常满意
  • 允许在数字字段中使用逗号

    这是一个非常愚蠢的问题 我觉得我一定错过了一些简单的事情 我有一个表格quantity场地 人们在输入数量时不断输入逗号 例如 他们输入12 000表示一万二千 所以我想在保存数量之前去掉逗号 12000在示例中 转换为数据库中的整数列 到