【问题标题】:How to save leading zeroes (zeroes in prefix), to a number field, in ruby on rails?如何在 ruby​​ on rails 中将前导零(前缀中的零)保存到数字字段?
【发布时间】:2018-07-17 10:21:12
【问题描述】:

我有一个整数字段(银行帐号)。在将其保存在导轨中时,如果它包含任何前面的零,那么这些零会被导轨自动修剪(删除),如下所示。

.gems :086 > bank_detail = BankDetail.new
 => #<BankDetail id: nil, account_name: nil, account_no: nil, bank_name: nil, branch_name: nil, ifsc_code: nil, user_id: nil, created_at: nil, updated_at: nil> 
.gems :087 > bank_detail.account_no = "0123456"
 => "0123456" 
.gems :089 > bank_detail.save(:validate => false)
   (0.2ms)  BEGIN
  SQL (0.5ms)  INSERT INTO "bank_details" ("account_no", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["account_no", 123456], ["created_at", "2018-07-17 15:47:35.062139"], ["updated_at", "2018-07-17 15:47:35.062139"]]
   (22.7ms)  COMMIT
 => true 
.gems :090 > 
.gems :090 > BankDetail.last
  BankDetail Load (0.6ms)  SELECT  "bank_details".* FROM "bank_details"  ORDER BY "bank_details"."id" DESC LIMIT 1
 => #<BankDetail id: 21, account_name: nil, account_no: 123456, bank_name: nil, branch_name: nil, ifsc_code: nil, user_id: nil, created_at: "2018-07-17 10:17:35", updated_at: "2018-07-17 10:17:35"> 
.gems :091 > 

由于银行帐号包含前导零,我想制作轨道以保存数字字段以及前缀零。我该怎么做?

【问题讨论】:

  • 如果你没问题,可以保存为字符串
  • 帐号本质上不是数字。您可能希望将它们存储为字符串。
  • 这让我想起了一些问题,问为什么他们的十六进制数字一直恢复为整数。 :)
  • 不能存储带有前导零的数字字段。 123 == 0123 == 00123 == 000123 == ...。使用字符串:"123" != "0123" != "00123" != "000123" != ...

标签: ruby-on-rails ruby database prefix zero


【解决方案1】:

答案很简单:银行帐号可能看起来像一个数字,但不应以整数形式存储。请改用字符串列。

经验法则是:当数学对数字类型没有意义时,不要对数字使用整数列 - 例如帐号、邮政编码、序列号

【讨论】:

  • 我见过人们将电话号码存储为整数。 :facepalm:
  • 但是,是的,我打算发布这个经验法则。我会赞成你的。 :)
【解决方案2】:

看起来您的 account_no 字段在数据库中是数字。 您可以进行迁移以使其成为字符串。

【讨论】:

    【解决方案3】:

    account_no 列最好是字符串类型。然后,如果需要,您可以使用.to_i'0000123' 转换为123

    【讨论】:

    • 啊,小心点。 .to_i 做了正确的事,但是,比如说,Integer('0000123') 做了另一件事正确的事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2023-01-22
    • 2022-01-10
    • 2019-10-25
    相关资源
    最近更新 更多