Rails:通过调用其他类的类方法进行验证

时间:2014-10-23 10:15:46

标签: ruby-on-rails validation

我有很多模型包含一个名为source_name的字段。我需要在每个中实现一个验证器,它将检查source_name是否符合幕布条件。

现在我还有另一个名为SourceNameManager的班级。在此模型中,我有一个名为valid_source_name?的方法,它采用source_name_name并返回truefalse

通过调用外部服务类source_name进行仅验证SourceNameManager.valid_source_name?('some_name')的验证的最简单方法是什么。

我在考虑类似的事情:

validates :source_name, ->(record) { SourceNameManager.valid_source_name?(record.source_name) }

但我认为没有效果

1 个答案:

答案 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