[英]Zipcode , to_i and leading zero in Ruby/Rails
我試圖保存在參數中傳遞為"07306"
和"03452"
,但是to_i
似乎在驗證之前將這些字符串值轉換為7306
和3452
,因為驗證仍然失敗。
如何防止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.