簡體   English   中英

Ruby / Rails中的Zipcode,to_i和前導零

[英]Zipcode , to_i and leading zero in Ruby/Rails

我試圖保存在參數中傳遞為"07306""03452" ,但是to_i似乎在驗證之前將這些字符串值轉換為73063452 ,因為驗證仍然失敗。

如何防止Ruby刪除前導零?

郵政編碼是數據庫中的整數字段,驗證使用以下方法檢查zip的格式:

validates_format_of :zip, :with => /\A[+\-]?\d+\Z/, :message => "Please enter a valid US zipcode"

在談論整數時,在概念上使得前導0是沒有意義的。 在使用時格式化zipcode(即確保它具有正確的格式,在從int轉換為str時添加前導0 ),或將其保存為字符串

將其保存為字符串將減輕該問題,並且如果您決定支持可能有也可能沒有字母的外國郵政編碼,這也將有助於面向未來的事情。

是的,我同意將拉鏈存儲為整數是沒有意義的。 我還認為您需要非常確定您的應用中不需要非美國郵政編碼。 盡管有這些警告,但......

如果由於某種原因無法修改數據庫,可以修改郵政編碼的get方法,如下所示:

def zip
  val = read_attribute(:zip).to_s
  val.length < 5 ? add_leading_zeros(val) : val
end

def add_leading_zeros(val)
  while val.length < 5 do
    val = "0" + val.to_s
  end
  val
end

這有點hacky,如果你可以將DB字段修改為字符串(varchar),我真的不建議這樣做。

您可能還想修改您正在使用的驗證,因為它將允許少於5個字符的郵政編碼。

也許使用這樣的東西:

validates_format_of :zip, :with => /^\d{5}$/

編輯:我會在這里留下這個答案,但我只是注意到OP已經改變了DB中的字段類型......所以,是的,我覺得現在輸入所有這些都有些愚蠢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM