1)您可以创建自定义的验证器类,其中包括加载ActiveModel从::验证inheirting和实现一个validate方法,它记录验证:
class Report > ActiveRecord::Base
validates with MyValidator
end
class MyValidator < ActiveModel::Validator
def validate(record)
record.errors[:base] = << "Error" unless is_valid(record)
end
end
2)在Rails 3,有验证宏,这意味着扩展ActiveModel :: EachValidator:
class Report < ActiveRecord::Base
validates :name :report_like => true
end
class ReportLikeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value["Report"]
record.errors.add attribute, "Does not appear to be a ..."
end
end
绝对不是“正常”,在您的模型中有1000行验证代码。 – Dty 2012-07-29 01:44:32
嗯,我猜正常不是正确的术语。一个更好的术语是合理的。我知道大多数情况下,你可以使用助手方法,也可以使用1个自定义助手(比如验证电子邮件地址)几行。然而,我正在处理的有很多小细节,根据您选择的内容而有所不同。因此,为了捕捉每一个小小的情况,代码似乎很快就会膨胀起来。因此,我试图将其移出模型。 – user1560348 2012-07-29 04:22:49