1

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

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

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

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

有没有一种方法可以访问数据库数据,例如当前 id,以便我可以从值中过滤掉自己,或者检查提交的日期时间字段是否等于数据库字段(所以我可以跳过此检查)。

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

PS我正在使用rails 3.2.3

4

1 回答 1

0

要从结果中排除self,只需将条件添加到您的where排除其 ID 中。还可以通过调用节省一些内存和处理器时间,它只exists?返回 true 或 false,而不是获取整行并构建新对象:

Event.where( :start_at => start_at,
             :event_calendar_id => event_calendar.id ).
      where( "id <> ?", id ).
      exists?
于 2012-05-24T08:26:49.377 回答