0
我有一个Contribution
和Reward
模型。奖励belongs_to
。我想要一个贡献是有效的,只有它的数额大于其奖励的minimum_contribution
。Rails 3复杂验证设计
所以我
Class Contribution < ActiveRecord::Base
attr_accessible :reward_id, :reward
belongs_to :reward
validates_presence_of :amount
validates_numericality_of :amount, greater_than: 0
validates_presence_of :reward
validates_each :amount, unless: SOMECONDITION do |contribution, attr, amount|
reward = contribution.reward
contribution.errors.add(attr,
"Contribution must be at least #{reward.minimum_contribution}") unless amount > reward.minimum_contribution
end
end
我的问题是什么是适当放于SOMECONDITION
。在验证运行之前,我需要确保
- 该贡献的有效性已定义(或甚至是数字)。否则,在
unless value > reward.minimum_contribution
比较将有一个错误,因为你无法比拟的零 - 定义
- 的贡献的奖励的minimum_contribution被定义的贡献的奖励和数字
我应该ALL在lambda做这个为SOMECONDITION
?有这么多警卫进行单一验证,感觉有点不对劲。我正确地设计这个吗?是否有适当的设计在我的验证中抛出异常,例如,unless amount > contribution.reward.minimum_contribution
当amount
实际上是nil
? (很明显,我总是期待量是数字,但我不知道我应该怎么偏执在我的验证/正是我可以信任)