我有一个模型,该模型具有在创建时提供的多个属性。该模型还具有一些从提供的属性派生的附加属性,我也想在创建时计算这些属性。更有问题的是,我希望能够对这些派生值运行验证(因为有些输入本身是有效的,会导致派生值无效)。
问题是当我这样做时:
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
是零,直到进一步进入验证和创建过程。
显然,我可以在稍后阶段设置我的派生值,并添加一个适用于给定属性的自定义验证,但这需要进行两次派生,这不会很干燥。
是否有其他方法可以在阶段中获得已分配但尚未验证的属性before_validates
?
编辑:为了澄清,我想在验证检查之前MyClass.new(:given1 => aNumber, :given2 => otherNumber)
调用并计算派生值,以便验证检查就像我调用了. 问题是我似乎无法访问方法和方法中的传入值。MyClass.new(:given1 => aNumber, :given2 => otherNumber, :derived => aNumber + otherNumber)
:given1
:given2
before_validations