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
? (很明顯,我總是期待量是數字,但我不知道我應該怎麼偏執在我的驗證/正是我可以信任)