什么时候“验证”执行?

时间:2011-12-21 15:32:04

标签: ruby-on-rails ruby

我是一名Objective-c程序员,所以我不习惯在方法之外使用代码。

我有一个关于铁路validates的两部分问题。

考虑以下代码:

class User < ActiveRecord::Base
  attr_accessible :name, :email

  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :name,  :presence   => true,
                    :length     => { :maximum => 50}

  validates :email, :presence   => true,
                    :format     => { :with => email_regex }.
                    :uniqueness => true

end
  1. 何时执行validates方法?在实例化User实例或加载其类定义时?
  2. User何时实际验证?当我保存User实例或创建它时?

5 个答案:

答案 0 :(得分:2)

执行类定义时,将调用类定义中的所有调用,而不是在创建实例时调用。值得一提的是,变量email_regex不是实例变量,而是类定义的局部变量。

答案 1 :(得分:1)

1)这些方法在User类本身上调用,并为其实例对象添加验证。

2)当你保存它们时。

PS:您可以使用valid_email gem来验证您的电子邮件地址。

你可以这样做:

validates :email, :presence => true, :email => true

...将valid_email放在Gemfile上。

答案 2 :(得分:0)

1 - 验证在保存/创建模型之前作为回调发生。因此,您可以实例化没有验证的模型。但是,当您尝试保存它时 - 它必须通过验证。

2-用户何时实际获得验证?当我保存用户实例或创建它时?

用户在保存或创建时获得验证。如果需要,您也可以覆盖它。

答案 3 :(得分:0)

你在rails控制台试过吗?当我有这样的问题时,我会经常互动地看看会发生什么。

./script/console
Loading develoment environment (... )
>> #make a user here and see if you can

如果您尝试保存用户并且未满足您指定的先决条件,则会收到错误消息。

答案 4 :(得分:0)

  1. 在加载user.rb文件时执行验证。
  2. 当您调用#save或#valid?
  3. 时,用户实际上已经过验证