【发布时间】:2011-03-23 01:58:47
【问题描述】:
平台:Rail 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
上面定义的验证在创建时可以正常工作,但在更新的情况下我需要实现不同的逻辑。我不想为相同的要求定义两种方法。所以我想根据函数是更新还是创建操作来实现检查。有什么方法可以知道触发验证的操作是更新还是删除?
【问题讨论】:
标签: ruby ruby-on-rails-3 customvalidator