モデル (オークション) に 2 つの属性 (時間と日) があります。時間と日の組み合わせに関するビジネス ロジックがあります。例えば
auction duration = days*24 + hours
また、時間と日にいくつかの基本的な検証があります。
class Auction < ActiveRecord::Base
validates :days,:presence => true, :numericality => { :greater_than_or_equal_to => 0, :only_integer => true }
validates :hours,:presence => true, :numericality => { :greater_than_or_equal_to => 0, :only_integer => true }
ビジネス ロジックを検証に組み込みたいので、時間と日数の両方をゼロにすることはできません。ActiveRecord 検証でこれを行う方法はありますか? AR検証なしでこれを行う方法が他にもあることは知っています。現在、モデルの新しいインスタンスを作成しています。上記のように曜日と時間を検証します。次に、「手動で」検証を行い、合格しない場合はインスタンスを削除するモデルメソッドがあります。私はこれがこれを行うための最良の方法ではないことを知っています
def compute_end_time
# assumes that days and hours are already valid
time = self.days*24 + self.hours
if time > 1
self.end_time = time.hours.from_now.utc
self.save
else
# Auction duration too short (i.e. zero)
self.delete
end
end