2012-12-14 19 views
1

我正在使用Ruby on Rails 3.2.9。我实现了custom validator,并且我想在使用validate方法时跳过验证(在迁移文件中创建新对象)。一般来说,我可以使用:without_protection => true作为create!方法的参数,但在我的情况下(请参阅下面的代码),它似乎不起作用:验证不会被跳过。如何在使用`validate`方法时跳过验证?

class Article < ActiveRecord::Base 
    validate do 
    # custom validation code 
    end 
end 

如何跳过验证?

回答

1

您必须确保所有其他验证都被禁用才能生效。 ActiveRecord不能选择性地禁用验证,但可以完全忽略它们。

例如:

class Article < ActiveRecord::Base 
    validate :something, 
    :if => :validations_are_turned_on? 

    validate :always 

protected 
    def validations_are_turned_on? 
    [email protected]_disabled 
    end 
end 

标记任何非必要的验证与适当:if条件应该工作。在这种情况下,如果@validations_disabled未设置,则所有验证都将运行。

+0

在我的情况(使用'验证做... end' *块*的时候)是有什么方法避免状态的方法的名称(如你用'制作:something')并将“:if”条件应用于“验证块”? – Backo

+0

你总是可以使用块驱动方法在线声明你的验证,但它确实会增加我的看法。不管什么对你有用,但。 – tadman

1

没有保护没有关闭验证,它允许你批量分配受保护的属性。要保存而不验证:

new_record = Article.new 
new_record.save(:validate => false) 
相关问题