【问题标题】:Validation that excludes itself on update action if fields have not changed如果字段未更改,则在更新操作时排除自身的验证
【发布时间】:2010-12-20 23:14:43
【问题描述】:

我有一个名为rents 的表,其中包含开始日期和结束日期。然后我创建了一个验证,这样新租金就不能与现有租金的开始和结束日期重叠。

问题是,当我单击租金进行更新时,如果我不更改任何字段并单击更新。它试图验证自己并说它与现有记录重叠。 (它所指的现有记录就是它本身。)

我想做的是,我怎样才能让我的验证排除自己。这就是我的验证的样子。

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

【问题讨论】:

  • 我已重新格式化您的代码,使其出现在代码块中。您可能需要重新格式化它,以便方法的内容不会在一行太宽而无法看到。

标签: validation activerecord model ruby-on-rails-3


【解决方案1】:

您需要检查 ActiveModel 的脏检查模块。您可以检查属性是否已更改并相应地分支您的逻辑。

http://railsapi.com/doc/rails-v3.0.1/classes/ActiveModel/Dirty.html

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多