私の検証の 1 つで、ユーザーの日付範囲の入力が既存の保存された日付範囲と重複していないことを確認したいと思います。
class Timecard < ActiveRecord::Base
validate :does_not_intersect_with_existing_timecards
def does_not_intersect_with_existing_timecards
if from_date && to_date &&
!Timecard.where("? <= to_date AND ? >= from_date", from_date, to_date).empty?
errors.add(:from_date, "must not intersect with existing timecards")
end
end
end
問題は、この検証がupdate
メソッドから呼び出された場合に失敗することです (where
節がデータベースで現在更新されているレコードを検出するため)。on: :create
ユーザーは日付範囲を編集する可能性があるため、検証だけはしたくありません。
現在のモデルを検証クエリから除外するにはどうすればよいですか?
検証メソッド内からid
アクセスできないようです...@id