0

我目前正在开发一个 Rails 3 应用程序,该应用程序具有一个表单,该表单采用一个父对象,该对象具有从相当大的数组中选择的几个预定义属性。每个父对象都有几个子对象,根据您在父对象中选择的预定义属性,可以有非常不同的最小-最大值,每个都有自己独立的通常独特的限制。

我很快意识到验证这些对象将导致一个非常大的模型文件。我想知道是否有适当的方法从模型中删除这种类型的大规模验证(或者至少让模型指向其他地方)。

还有一个更高级的问题,有发言权是否正常... 1000 行代码来验证对象数据的完整性?

4

1 回答 1

2

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
于 2012-07-29T01:43:03.713 回答