我是一名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
validates
方法?在实例化User
实例或加载其类定义时?User
何时实际验证?当我保存User
实例或创建它时?答案 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)