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