我有一张名为租金的表,其中包含开始日期和结束日期。然后我创建了一个验证,以便没有新的租金不能重叠现有的租金开始和结束日期。
问题是,当我点击租金来更新它,如果我不更改任何字段并点击更新。它试图对自己进行验证并说它与现有记录重叠。 (它所指的现有记录就是它本身。)
我想做的事情是,我怎样才能让我的验证排除在外。这就是我的验证方式。
def should_not_overlap_rental_periods
errors.add(:start_date, "can't overlap other rental periods") if self.rents.where("end_date <= ? and start_date >= ?", self.end_date.strftime("%Y-%m-%d"), self.start_date.strftime("%Y-%m-%d")).count > 0 unless self.rents.blank?
end
答案 0 :(得分:1)
您需要检查ActiveModel Dirty Checking模块。您可以检查属性是否已更改并相应地分支逻辑。
http://railsapi.com/doc/rails-v3.0.1/classes/ActiveModel/Dirty.html