Contribution
とReward
モデルがあります。貢献belongs_to
は報酬です。寄付が有効になるのは、その金額が報酬の金額よりも大きい場合のみですminimum_contribution
。
ので、私は持っています
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
ないと、nilと比較できないため、比較するとエラーが発生します。 - 貢献の報酬が定義されます
- コントリビューションの報酬のminimum_contributionが定義され、数値
私はこれをすべてラムダで行うべきSOMECONDITION
ですか?1回の検証で非常に多くの警備員がいることについて何かが間違っていると感じています。私はこれを適切に設計していますか?たとえば、実際にunless amount > contribution.reward.minimum_contribution
いつであるかなど、検証で例外をスローすることは適切な設計ですか?(明らかに、私は常に量が数値であることを期待していますが、検証でどれほど妄想的である必要があるか/正確に何を信頼できるかわかりません)amount
nil