我正在使用PhoneLib
(https://github.com/daddyz/phonelib)来验证我的电话号码。
我有一个带有列phone_number
的模型Subscription
.
我正在测试这个电话号码:3052612151
。
我可以看到Phonelib认为它是一个有效的数字:
> Phonelib.valid_for_country? "3052612151", :us
#=> true
但是,当我使用 Phonelib 的验证器时,我的记录不被认为是有效的。
class Subscription < ApplicationRecord
validates :email, presence: true
validates :phone_number, phone: { countries: :us }
> s = Subscription.create(phone_number: '3052612151', email: 'example@example.com')
> s.valid?
#=> false
> s.errors.full_messages
#=> ["Phone number is invalid"]
我已经挠头一个多小时了。谁能看出我做错了什么?为什么Phonelib在拨打#valid_for_country时认为该号码有效?但用作验证器时不行?
我唯一能想到的是,也许您应该在初始值设定项中设置默认国家/地区
# config/initializers/phonelib.rb
Phonelib.default_country = "US"
然后只需在模型中使用validates :phone_number, phone: true
。
尝试使用countries: [:us]
,验证器实际上执行&
操作并检查大小是否大于 0,也许它需要一个数组。 https://github.com/daddyz/phonelib/blob/master/lib/validators/phone_validator.rb#L85
验证器实际上检查了 4 个验证,这是一个非常糟糕的设计,所有验证都返回相同的错误消息,奇怪 :S. https://github.com/daddyz/phonelib/blob/master/lib/validators/phone_validator.rb#L63