我有一个字段字符串foo
,必须满足四个条件:
前两个由:presence
和:uniqueness
验证处理。通过正则表达式:format
验证可以轻松处理后两者。
是否可以包含多个:format
验证规则,并且具有不同的:message
值?
我想避免将这两个条件合并为一个正则表达式。除了多条消息之外,我认为如果它们不同,它们更容易阅读和写入。
理想情况下,我希望所有这些内容都包含在一个validates
调用中,但这并非严格要求。
答案 0 :(得分:17)
根据source code for the validates method,没有办法做到这一点;你得到一个:format
密钥和一组选项作为哈希值。
然而,没有什么可以阻止我两次致电validates
:
validates :foo,
:presence => true,
:uniqueness => true,
:format => {
:with => /^[\w\-]*$/,
:message => 'may only contain letters, digits, and hyphen'
}
validates :foo, :format => {
:with => /^(?!bar)/,
:message => 'may not start with "bar"'
}
这似乎工作正常。
答案 1 :(得分:2)
一个验证可以嵌入多个属性,如Validator#validate source code。所以可以更清洁如下:
validates :foo,
:presence => true,
:uniqueness => true,
:format => {`enter code here`
:with => /^[\w\-]*$/,
:message => 'may only contain letters, digits, and hyphen'
},
:format => {
:with => /^(?!bar)/,
:message => 'may not start with "bar"'
}
}