0

プラットフォーム:Rail 3.0
データベース:mysql 5.1

ビジネス要件:一度に発行できるのは、製品の1つのアイテムのみです。発行された商品の返品後、同じ商品の新しい商品を発行することができます。異なる製品からの複数のアイテムを一度に発行できます。

上記のビジネス要件を実装するために、同じ日付範囲内に同じ製品に対して発行されたアイテムがすでにあるかどうかを確認しています(where以下の日付の重複があるかどうかを確認することによって)。

ただし、次の例外が発生します。NoMethodError:Lecture:Moduleの未定義のメソッド`where'

このビジネス要件を適用するには、カスタム検証を使用できる必要があります。何か案は?以下は私がこれまでに持っているものです:

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
4

1 に答える 1

2

通常Item.whereは機能しますが、この場合、何らかの理由で名前空間の問題が発生しているようです。

self.class.where大丈夫なはずです。

于 2011-03-21T15:42:50.673 に答える