平臺:鐵3.0 數據庫:MySQL 5.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
以上定義的驗證對創建工作正常,但在更新的情況下,我需要實現不同的邏輯。我不想爲相同的要求定義兩種方法。所以我想根據是否更新或創建操作來實現與函數的檢查。是否有任何方式可以知道觸發驗證的操作是更新還是刪除?
它似乎不贊成使用validate_on_create和validate_on_update,而不是驗證哪些可用於我的情況,而不是:除非=>持續。在這裏,我的擔心是基於更新或基於update或create call定義的方法來創建或添加檢查方法。那麼在這種情況下,您提供的解決方案將無法正常工作,對吧? – 2011-03-23 02:45:59
但在某處,我覺得你告訴我從你的經驗小複雜的事情,因爲我面臨另一個問題也可能與你在這裏建議的相關,請參閱http://stackoverflow.com/questions/5400261/rails-methods-註冊驗證創建上的呼叫更新屬性是 – 2011-03-23 02:46:59
對於一個,做'validate:validate_method_for_create,:除非=>:持久?';對於另一個,'驗證:valiate_method_for_update,:if =>:持久?'。 – yfeldblum 2011-03-23 02:54:50