Railsでモデルのsave!
を実行してバリデーションエラーが発生したとき、モデルの値を自動で元に戻す方法ってあるんでしょうか?
例えばProject
(案件)モデルがあって、このモデルはユーザが入力する名称や終了予定日、状態を管理するためのstatus
フィールドがあるとします。
Project作成直後は状態がpending
になっていて、終了予定日を入力して「プロジェクトを開始」すると状態がrunning
になるような入力画面があります。このときProject
モデルの実装はこんな感じで考えています。
project.rb
1def start_project(due_date) 2 self.due_date = due_date # ユーザが指定した終了日 3 self.started_at = DateTime.now # 開始日時 4 self.status = 'running' # 状態`status`を進行中にする 5 save! 6end
ユーザが入力したdue_date
がsave!
バリデーションエラーになったとき、画面にエラーメッセージを表示して再入力を促します。入力したdue_date
はそのまま入力欄に保持されて欲しいのですが、画面に表示しているstatus
とstarted_at
は元のpending
とnil
に戻したいです。
rescue
でキャッチして値を自分でひとつずつクリアする方法しか思い浮かびませんでした。
フォームクラスのようなものでバリデーションするRails以外のWAFはモデルと入力値が関連付いてないので問題ないのですが、Railsのようにモデルを直接画面に表示したり、バリデーションしたりする系のフレームワークってどうされてるんでしょう?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/17 09:13