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

Rails validate format. "001" should be valid but not "1" or 1. /\A\d\d\d\z/ not working

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

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 上测试正则表达式时,它不会 return 与单个或 2 位数字匹配。最终我希望它只允许格式为 /\d\d\d/ 的字符串(这是 table 上的数据类型)。我缺少什么导致“001”和“1”都通过?

我还注意到,当测试一个整数时,即使它位于无效字符串数字的右侧,测试也会失败。

我认为您使用了无效的验证助手,即 validate instead of validates