ActiveRecord错误?或者我弄错了? (validates_presence_of if)

时间:2010-04-30 05:56:21

标签: ruby-on-rails activerecord

确定:

User
    attr_accessible :name, :email, :email_confirmation

    validates_presence_of :email_confirmation if :email_changed?

在以下情况下会发生什么:

u = User.find 1
u.name = 'Fonzi'
u.name_changed? # => true
u.email_changed? # => false
u.valid? # => false : email_confirmation is required

基本上,如果我更改if除非验证按预期工作,否则不会验证电子邮件是否未更改,将验证电子邮件是否已更改。我认为IF表示“如果以下函数返回true,则运行此验证。似乎向后工作!?我只是错了吗?

1 个答案:

答案 0 :(得分:4)

你的语法有点混淆了条件验证。您可以向验证方法传递一个名为“if”的选项,其值为方法,过程或字符串,而不是使用常规的后置修复条件。所以看起来应该更像这样:

validates_presence_of :email_confirmation, :if => :email_changed?

查看完整独家新闻的documentation