ユーザーがフォームを介して入力した7つの数値属性を持つRailsモデルがあります。
これらの各属性の存在を検証する必要があります。これは明らかに簡単に使用できます。
validates :attribute1, :presence => true
validates :attribute2, :presence => true
# and so on through the attributes
ただし、いくつかの属性を取得し、それらを使用していくつかの計算を行うカスタムバリデーターも実行する必要があります。これらの計算の結果が特定の範囲内にない場合は、モデルを無効と宣言する必要があります。
それ自体で、これも簡単です
validate :calculations_ok?
def calculations_ok?
errors[:base] << "Not within required range" unless within_required_range?
end
def within_required_range?
# check the calculations and return true or false here
end
ただし、問題は、メソッド「validate」が常にメソッド「validates」の前に実行されることです。これは、ユーザーが必須フィールドの1つを空白のままにすると、空白の属性を使用して計算を行おうとすると、railsがエラーをスローすることを意味します。
では、最初に必要なすべての属性の存在を確認するにはどうすればよいですか?