Rails验证格式。 “001”应该有效但不是“1”或1. / \ A \ d \ d \ d \ z /无效

时间:2015-05-26 20:41:29

标签: ruby-on-rails regex rspec shoulda

尝试在我的某个模型中测试以下验证时,我遇到了一个问题:

validate :clientnumber, format: { with: /\A\d\d\d\z/ }

基本上我想让“001”成为有效的条目,但不允许“1”。当我运行这些测试时:

it do
   should allow_value('880', '546', '001', '999').for(:clientnumber)
end
it do
   should_not allow_value('foo', '8ar', '1' ).for(:clientnumber)
end 

我得到以下结果。

should allow clientnumber to be set to any of ["880", "546", "001", "999"]

但是,

should not allow clientnumber to be set to any of ["foo", "8ar", "1"] (FAILED - 1)

失败

最初我甚至尝试过在那里测试普通整数,但意识到即使字符串形式通过它也没有实际意义。在rubular上测试正则表达式时,它不会返回任何与单个或2位数字匹配的匹配项。最终我希望它只允许字符串(表格中的数据类型)的格式为/ \ d \ d \ d /。我错过了什么导致“001”和“1”都能通过?

另外我注意到,在测试整数时,即使它在无效字符串数的右边,测试也会对整数失败。

1 个答案:

答案 0 :(得分:0)

我认为你使用了无效的验证助手,即validate而不是validates