2011-03-21 62 views
0

平台:铁3.0
数据库:MySQL 5.1中使用其中的自定义模型验证

业务需求:只有一个产品的项目,可以在同一时间发出。发行物品退回后,可以为同一产品发出新的物品。一次可以发出来自不同产品的多个项目。

为了实施上述业务要求,我正在检查是否已经在同一日期范围内为同一产品签发了一件商品(通过检查下面我的where中是否有日期重叠)。

但是,我收到以下例外情况:NoMethodError:未定义的方法`其中'讲座:模块

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

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

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

self.class.where应该没问题。

+0

Item.where也不能正常工作,我在尝试这个之前尝试过。我在rails控制台上处理了这些查询,但它在Model函数内部不起作用。我是否缺少一些基本概念? – 2011-03-21 22:11:08

+0

这里是我遇到Item.where NoMethodError的情况下的异常:undefined方法'where'对于Item:模块 – 2011-03-21 22:19:05

+1

我试过了,它在我的Rails项目中运行良好。奇怪!必须是一些奇怪的名称空间正在进行。试试self.class.where,让我知道你是否有幸运! – Ant 2011-03-22 09:15:58