Rails/Phonelib:为什么我的电话号码验证器失败了?



我正在使用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

最新更新