我有以下模型,对应下表:
PriceAvailability
ID| PRODUCT_ID| VALID_FROM|VALID_TO|PRICE
基本上,该表存储特定产品在特定日期范围内的价格。就像产品可能在2012年1月1日至2012年5月3日之间花费10美元,从5月3日到6月底之间花费12美元等等。事实是我需要设置一个验证器:
我有了设置验证器的想法,甚至为开始日期设置了一个简单的验证器,但是我坚持实现这种检查。我该怎么办?
答案 0 :(得分:1)
请告诉我这是否适合您:
validate :ensure_unique_date_ranges
def ensure_unique_date_ranges
date_ranges = (products.price_availabilities - [self]).map{ |pa| (pa.valid_from.to_i..pa.valid_to.to_i) }
self.errors[:base] << 'date range is invalid' if date_ranges.detect{ |dr| (dr.to_a & (valid_from.to_i..valid_to.to_i).to_a).empty? }
end
值得注意的是date.to_i。如果范围很大,那么性能可能会下降。试试看它是否可以接受。