前提・実現したいこと
現在hostモデルとuserモデル間の契約であるAgreementモデルのカスタムvalidateを作成しています。
以下の条件を満たすvalidateを作成したいと考えています。
1.同一userは契約期間(start_timeとfinish_timeの差分)が重複したagreementを持てない
2.同一hostはuser_idと契約期間が重複したagreementは持てない
つまりuserは体一つなので同じ時間帯に二つも契約できないよ。
hostは企業なのでたくさんuserを雇えるよ。
ということです。
説明が下手ですみません。
この条件を満たす自作validateの作り方をご教授おねがいします。
deviseのuser_signed_inが使えれば見えてきそうな気がするのですが、modelファイルでは使用できないようでした。。。
該当のソースコード
ruby
1class Agreement < ApplicationRecord 2 belongs_to :user 3 belongs_to :host 4 5 validate :duplication 6 7 def duplication 8 if user_signed_in? 9 result = Agreement.where('finish_time >= ? && ? >= start_time', start_time, finish_time) 10 unless result.blank? 11 errors.add(:start_time, "入力した勤務時間が別の勤務時間と重複しています。") 12 end 13 end 14end 15
追記
ruby
1def duplication_of_work_hours_for_same_user 2 result = Agreement.where('finish_time >= ? && ? >= start_time && user_id = ?', start_time, finish_time, user_id) 3 unless result.blank? 4 errors.add(:start_time, "勤務時間が他の勤務時間と重複しています。") 5 end 6 end 7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/01 12:08
2021/07/01 12:28