作成時に提供されるいくつかの属性を持つモデルがあります。モデルには、提供された属性から派生した追加の属性もいくつかありますが、これも作成時に計算したいと考えています。さらに問題なのは、これらの派生値に対して検証を実行できるようにすることです (無効な派生値につながる、それ自体で有効な入力があるため)。
問題は、私がこれを行うときです:
class MyClass < ActiveRecord::Base
attr_accessible :given1, :given2, :derived
before_validation :derivation
validates_uniqueness_of :derived
def derivation
self.derived = self.given1 + self.given2
end
end
MyClass.new(:given1 => aNumber, :given2 => otherNumber)
に追加できないというエラーが常に表示nil
されnil
ます。self.attribute
検証と作成プロセスがさらに進むまで、明らかにゼロです。
明らかに、派生した値を後の段階で設定し、特定の属性で機能するカスタム検証を追加できますが、それには派生を 2 回行う必要があり、あまり DRY ではありません。
before_validates
ステージで割り当てられているがまだ検証されていない属性を取得する他の方法はありますか?
編集:明確にするために、検証チェックの前MyClass.new(:given1 => aNumber, :given2 => otherNumber)
に呼び出して派生値を計算し、検証が呼び出したかのようにチェックするようにします。問題は、渡されたおよびメソッドの値にアクセスできないように見えることです。MyClass.new(:given1 => aNumber, :given2 => otherNumber, :derived => aNumber + otherNumber)
:given1
:given2
before_validations