如何将前导零(前缀中的零)保存到轨道上的红宝石中的数字字段中?

时间:2018-07-17 10:21:13

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

我有一个整数字段(银行帐号)。在将其保存在rails中时,如果其中包含任何先前的零,那么将由rails自动修剪(删除)零,如下所示。

.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 > 

由于银行帐号中包含前导零,因此我想使用rails来保存数字字段以及前缀零。我该怎么办?

3 个答案:

答案 0 :(得分:5)

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

经验法则是:当数字对数学没有意义时,请勿使用整数列作为数字,例如帐号,邮政编码,序列号

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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