2010-05-08 59 views
0

我有两个或多个模型完全相同的自定义验证方法。哪里是放置这种验证方法的最佳地点,以便两种模型都可以访问并保持干燥?如果验证失败,我也想使用errors.add_to_base,所以无论这个方法放在哪里,我都应该能够适应这一点。Rails:跨多个模型的验证,放在哪里?

回答

0

在lib目录中创建一个模块,然后将其包含进来。您还可以创建一个父类,从中继承模型并将其放在那里,但对于简单的事情来说,这看起来有点超过顶端。

0

最好的做法是创建一个自定义验证器,该验证器可以扩展ActiveModel::EachValidator(如果属性验证)或ActiveModel::Validator如果它有点复杂。

class DomainNameValidator < ActiveModel::EachValidator 

该文件应该驻留在app/validators/contact_address_validator以被rails自动加载。每个需要的是验证可以指定

validates :name, uniqueness: true, domain_name: true 

其中关键部分是domain_name: true类。 _validator是不需要的。如您所见,您的自定义验证器可以与其他Rails内置验证器结合使用。