我正在开发一个活动日历,其中每小时是一个允许用户签署一个约会的插槽。
由于有一项功能允许用户更新插槽(并且还更改日期/时间),我想在更新值之前执行一些检查,确保插槽是空闲的。 所以我最终得到了这样的方法:
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
答案 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}}