前提
Ruby on Railsで画面を作成しています。
画面入力項目をDBに登録する際のエラーの挙動について質問したい。
<画面入力項目>
企業ID
契約開始日
契約終了日
上記入力項目をDBに登録する際、同一企業で契約範囲が重複していないかのチェックを行う。
ID | 企業ID | 契約開始日 | 契約終了日 |
---|---|---|---|
001 | 001 | 2023/01/01 | 2023/05/01 |
002 | 001 | 2023/05/02 | 2023/07/01 |
003 | 001 | 2023/06/01 | 2023/09/01 |
ID001,002が登録済みの状態でID003を登録しようとした場合はエラーとします。
実現したいこと
modelのバリデーションチェックで、重複エラーが発生した場合
・メッセージ”契約期間の重複があります”を表示したい
・契約開始日、契約終了日をエラー項目として表示したい(field_with_errors)
該当のソースコード
Rails
1class Contract < ApplicationRecord 2 # 略 3 4 validate :contract_period_check 5 6 private 7 # 略 8 9 def contract_period_check 10 if # SQLで重複レコードの存在チェック 11 errors.add(:base, '他契約期間の重複があります') 12 end 13 end 14end
この場合、field_with_errorsが項目につかないので画面上、契約開始日、契約終了日をエラー項目として表示できない。
試したこと
Rails
1errors.add(:start_date, "") 2errors.add(:end_date, "他契約期間の重複があります")
このような書き方も試しましたが、項目名がメッセージに付加されてしまいます。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。