2014-03-06 99 views
1

在rails中,我使用整數來表示用戶的電話號碼。Ruby on Rails .size不起作用

當我從@user.phone_number得到輸出時,我得到了=> 4088388579這是10位數字和輸入的電話號碼。

當我做@user.phone_number.size我得到=> 8

這是爲什麼要這樣做呢?

供參考:我有驗證模型,驗證長度是10位數字。 validates :phone_number, :length => {is: 10, :message => "A phone number needs to be 10 digits"}

+0

什麼是'放輸出@ user.phone_number.class'? –

+0

@ArupRakshit Fixnum是什麼被退回 –

+1

現在做'@ user.phone_number.to_s.size' ... –

回答

2

在Ruby中,與許多語言一樣,Integer(類Fixnum)由64位機器中的8個字節(32位中的4個字節)組成。所以.size方法返回這個數字代表的字節數。

如果您的號碼是big enough,就像是其他語言的Long(類別Bignum),它將由12個字節組成(實際上取決於機器架構)。

要檢查字符的長度作爲文字,您可以這樣做:your_number.to_s.size

例如:

$ > 0.class 
# => Fixnum 
$ > 0.size 
# => 8 

$ > 99999999999999999999.class 
# => Bignum 
$ > 99999999999999999999.size 
# => 12 
+0

我得到'4'。 –

+0

謝謝,這是有道理的。 –

+0

'4088388579.size'如何給OP'8',但我得到'4'。 :( –

相關問題