我有很多模型包含一个名为source_name
的字段。我需要在每个中实现一个验证器,它将检查source_name
是否符合幕布条件。
现在我还有另一个名为SourceNameManager
的班级。在此模型中,我有一个名为valid_source_name?
的方法,它采用source_name_name
并返回true
或false
。
通过调用外部服务类source_name
进行仅验证SourceNameManager.valid_source_name?('some_name')
的验证的最简单方法是什么。
我在考虑类似的事情:
validates :source_name, ->(record) { SourceNameManager.valid_source_name?(record.source_name) }
但我认为没有效果
答案 0 :(得分:0)
创建文件app/models/source_name_validator.rb
:
class SourceNameValidator < ActiveModel::EachValidator
validate_each(record, attribute, value)
unless SourceNameManager.valid_source_name?(value)
record.errors[attribute] << 'is not valid'
end
end
end
然后,在要验证源名称的每个模型中,添加:
validates :source_name, source_name: true