2011-03-21 57 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