Rails:跨越多个模型的验证,在哪里放置它?

时间:2010-05-08 20:20:57

标签: ruby-on-rails activerecord

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

2 个答案:

答案 0 :(得分:0)

在lib目录中创建一个模块,然后将其包含在内。您还可以创建一个父类,模型可以从中继承并放在那里,但对于那些简单的东西来说,这似乎有点过头了。

答案 1 :(得分: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内置验证器结合使用。