在自定义模型验证中使用位置

时间:2011-03-21 15:38:50

标签: ruby-on-rails activerecord model customvalidator

平台:Rail 3.0
数据库:mysql 5.1

业务要求:一次只能发布一件产品。退回已发出的项目后,可以发出相同产品的新项目。可以一次发布不同产品的多件商品。

为了实现上述业务要求,我正在检查是否已在同一日期范围内为同一产品发出了一个项目(通过检查以下where中的日期是否重叠)。

但是,我遇到以下异常: NoMethodError:未定义的方法`where for for Lecture:Module

我需要能够使用自定义验证来强制执行此业务要求。有任何想法吗?以下是我到目前为止:

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

1 个答案:

答案 0 :(得分:2)

通常Item.where会起作用,但出于某种原因,在这种情况下,它似乎有了命名空间问题。

self.class.where应该没问题。