我目前正在开发一个 Rails 3 应用程序,该应用程序具有一个表单,该表单采用一个父对象,该对象具有从相当大的数组中选择的几个预定义属性。每个父对象都有几个子对象,根据您在父对象中选择的预定义属性,可以有非常不同的最小-最大值,每个都有自己独立的通常独特的限制。
我很快意识到验证这些对象将导致一个非常大的模型文件。我想知道是否有适当的方法从模型中删除这种类型的大规模验证(或者至少让模型指向其他地方)。
还有一个更高级的问题,有发言权是否正常... 1000 行代码来验证对象数据的完整性?
我目前正在开发一个 Rails 3 应用程序,该应用程序具有一个表单,该表单采用一个父对象,该对象具有从相当大的数组中选择的几个预定义属性。每个父对象都有几个子对象,根据您在父对象中选择的预定义属性,可以有非常不同的最小-最大值,每个都有自己独立的通常独特的限制。
我很快意识到验证这些对象将导致一个非常大的模型文件。我想知道是否有适当的方法从模型中删除这种类型的大规模验证(或者至少让模型指向其他地方)。
还有一个更高级的问题,有发言权是否正常... 1000 行代码来验证对象数据的完整性?
1)您可以创建一个自定义验证器类,这涉及从 ActiveModel::Validator 继承并实现一个 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