检查更新值是否与存储的数据库不同

时间:2012-05-24 08:06:16

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

我正在开发一个活动日历,其中每小时是一个允许用户签署一个约会的插槽。

由于有一项功能允许用户更新插槽(并且还更改日期/时间),我想在更新值之前执行一些检查,确保插槽是空闲的。 所以我最终得到了这样的方法:

if Event.find(:all, :conditions => ["start_at = ? AND event_calendar_id = ?", self.start_at, self.id])
  errors.add :base, "You cannot save this appointment in that slot."
  return false
end

顺便说一下,在更新其他字段而不更改datetime字段时会产生问题,因为它会发现自己并引发异常,无法更新它。

有没有办法可以访问数据库数据,例如当前的id,这样我就可以从值中过滤掉自己,或者检查提交的datetime字段是否等于数据库数据(所以我可以跳过这个检查)。 / p>

最好的方法是什么? 感谢。

P.S。我正在使用rails 3.2.3

1 个答案:

答案 0 :(得分:0)

要从结果中排除self,只需在where中添加条件,但不包括其ID。通过调用exists?来节省一些内存和处理器时间,Event.where( :start_at => start_at, :event_calendar_id => event_calendar.id ). where( "id <> ?", id ). exists? 只返回true或false,而不是获取整行并构建新对象:

{{1}}