0

私は現在、かなり大きな配列から選択された2つの事前定義された属性を持つ1つの親オブジェクトを受け取るフォームを持つRails3アプリケーションに取り組んでいます。各親オブジェクトにはいくつかの子オブジェクトがあり、親で選択した事前定義された属性に応じて、大きく異なるmin-max値を持つことができ、それぞれに固有の制限があります。

これらのオブジェクトを検証すると、非常に大きなモデルファイルが作成されることにすぐに気付きました。このタイプの大規模な検証をモデルから削除する(または少なくともモデルが別の場所を指すようにする)適切な方法があるかどうか疑問に思いました。

また、より高いレベルの質問ですが、オブジェクトのデータの整合性を検証するための1000行のコードがあるのは普通ですか?

4

1 に答える 1

2

1) You can create a custom validator class, which involves inheirting from ActiveModel::Validator and implementing a validate method that takes the records to 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) In rails 3, there are validation macros as wel, which means extending 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 に答える