我有一个自定义方法,可以根据regexp检查值,但我也想检查nil值,但不确定是否在第一个子句中检查这两个实例。我需要两条不同的错误消息,这取决于它是零还是不匹配:
def format_mobile
regexp = /^(07[d]{9})$/
if !(regexp.match(mobile_no))
errors[:base] << "Please check your Mobile Number"
elsif mobile_no.blank? // also tried mobile_no == nil
errors[:base] << "Please provide your Mobile Number"
end
end
Rspec测试
通过
it 'is invalid with a Invalid mobile number (Company)' do
user = FactoryGirl.build(:user, company_form: true, mobile_no: '0780')
user.format_mobile
expect(user.errors[:base]).to include("Please check your Mobile Number")
end
失败
it 'is invalid with a NIL mobile number (Company)' do
user = FactoryGirl.build(:user, company_form: true, mobile_no: :nil)
user.format_mobile
expect(user.errors[:base]).to include("Please provide your Mobile Number")
end
有人能用我的自定义方法为我指明正确的方向吗?
问题出在您的检查顺序上。nil
将不匹配regexp,这就是为什么您永远不会进入第二个elsif
。只需更改订单:
def format_mobile
regexp = /^(07[d]{9})$/
if mobile_no.blank? # also tried mobile_no == nil
errors[:base] << "Please provide your Mobile Number"
elsif !(regexp.match(mobile_no))
errors[:base] << "Please check your Mobile Number"
end
end
希望能有所帮助。