プラットフォーム: Rail 3.0 データベース: mysql 5.1
ビジネス要件: 一度に発行できる商品は 1 つだけです。発行された商品の返品後、同じ商品の新しい商品を発行することができます。異なる商品の複数のアイテムを一度に発行できます。
上記のビジネス要件を実装するために、同じ日付範囲内で同じ製品に対して既に発行されたアイテムがあるかどうかを確認しています (以下の場所で日付の重複があるかどうかを確認することによって)。
class Item < ActiveRecord::Base
validate :validate_one_item_for_product
def validate_one_item_for_product
items = Item.where( "issue_date < ? and return_date > ? and product_id = ?", return_date, issue_date, product_id)
errors.add( :base, "item already issued for this product, not returned yet") if items.size > 0
end
end
上記で定義された検証は作成時に正常に機能しますが、更新の場合は別のロジックを実装する必要があります。同じ要件に対して 2 つのメソッドを定義したくありません。そのため、更新または作成操作に基づいて関数でチェックを実装したいと考えています。検証をトリガーした操作が更新または削除であるかどうかを知る方法はありますか?