Rails中的多种格式验证

Cra*_*ker 9 validation ruby-on-rails ruby-on-rails-3

我有一个foo必须满足四个条件的字段串:

  • 它必须是非空白的
  • 它必须是所有记录的唯一
  • 它必须只包含字母,数字和超量
  • 它不能以字符串"bar"开头

前两个由处理:presence:uniqueness验证处理.后两者很容易:format通过正则表达式进行验证来处理 .

是否可以包含多个:format具有不同:message值的验证规则?

我想避免将这两个条件合并为一个正则表达式.除了多条消息之外,我认为如果它们不同,它们更容易阅读和写入.

理想情况下,我希望所有这些都能在一次validates通话中完成,但这并不是严格要求的.

Cra*_*ker 19

根据验证方法源代码,没有办法做到; 你得到一个: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"'
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常.