0
重複をチェックする検証を作成しようとしています。時間の重複を確認する
scope :overlapping_activity, ->(activity) { where("(start_on, end_on) OVERLAPS (?, ?)",
activity.start_on, activity.end_on }
validate :not_overlapping_activity
def not_overlapping_activity
if Activity.overlapping_activity(self).any?
errors.add(:base, "Zajęcie w tym okresie koliduje z innymi.")
end
end
エラー:
ERROR: function pg_catalog.overlaps(time without time zone, time without time zone, unknown, unknown) is not unique
LINE 1: ...NT(*) FROM "activities" WHERE ((start_on, end_on) OVERLAPS (...
私はこのトピックを見つけました:Rails 3.1: Querying Postgres for records within a time range、私は私の解決策でそれを使用することはできません。スコープ内にタイムスタンプを追加しようとすると、別の構文エラーが表示されます。誰かが私の問題を適切に解決する方法を教えてもらえますか?
scope :overlapping_activity, ->(activity) { where("(start_on::timestamp, end_on::timestamp) OVERLAPS (?, ?)",
timestamp activity.start_on, timestamp activity.end_on) }
あなたは 'スコープ:overlapping_activity、 - >(アクティビティ){ここで("(start_on :: timestamp、end_on :: timestamp)OVERLAPS(timestamp:start_on、timestamp:end_on ) "、:start_on => activity.start_on、:end_on => activity.end_on)}'? –
@IVOGELOVこれはエラーです: 'エラー:タイムゾーンを持たないタイプタイムアウトをタイムゾーンなしのタイムスタンプにキャストできません ' –
' activity.start_on'と 'activity.end_on'に日付だけでなく時刻も含まれていますか? –