aL3*_*3xa 14 validation ruby-on-rails-3 rails-activerecord
我创建了一个具有多个字段的模型,这些字段应该接受相同的数据格式(字符串,但可以是任何东西,FWIW).我想将相同的验证规则应用于所有这些字段.当然,我可以继续复制/粘贴东西,但那样会违反DRY原则,而且常识也是......
我想这个很容易,但我是一个Rails新人/时髦人士,所以请原谅一个微不足道的问题.=)
Jon*_*osh 21
所以如果你说三个字段要验证:
:first_name
:last_name
:age
Run Code Online (Sandbox Code Playgroud)
你希望他们都得到验证吗?所以像这样:
validates_presence_of :first_name, :last_name, :age
Run Code Online (Sandbox Code Playgroud)
编辑: Rails中有许多不同的验证方法,它们非常灵活).对于您可以使用的字段的格式validates_format_of,然后使用正则表达式来匹配它.以下是匹配电子邮件的示例:
validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
Run Code Online (Sandbox Code Playgroud)
我查看了Active Record Validations和Callbacks指南; 它提供了有关Active Record在验证方面提供的许多功能的全面见解.您也可以在这里查看文档.
如果您使用任何内置验证(presence,length_of),则可以对多个属性应用单个验证,如下所示:
validates_presence_of :name, :email
Run Code Online (Sandbox Code Playgroud)
如果您有自定义逻辑,则可以创建一个验证器对象来存放代码并单独应用它
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.errors[attribute] << (options[:message] || "is not an email") unless
value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
end
end
def Person
validates :home_email, :email => true
validates :work_email, :email => true
end
Run Code Online (Sandbox Code Playgroud)
请参阅:http://thelucid.com/2010/01/08/sexy-validation-in-edge-rails-rails-3/
| 归档时间: |
|
| 查看次数: |
12311 次 |
| 最近记录: |