例外処理に移行したあとにバリデーションエラー情報をクラス別に分類して格納させる方法を教えてください。
下記のようにすれば@errorに全てのバリデーションエラー情報を格納できると思うのですが、
rescue ActiveRecord::RecordInvalid => error
@error = error.record
そうではなく・・・
@hoge にはHogeクラスの、@fugaにはFugaクラスの、@fugoにはFugoクラスの
バリデーションエラー情報をそれぞれ分けて格納したいです。
どのように記述すればよいでしょうか?
helperとの連動が必要です。
controller
1ActiveRecord::Base.transaction do 2 3 @hoge = Hoge.new(name: params[:name]) 4 @hoge.save! 5 6 @fuga = Fuga.new(name: params[:name]) 7 @fuga.save! 8 9 @fugo = Fugo.new(name: params[:name]) 10 @fugo.save! 11end 12 redirect_to :root 13rescue ActiveRecord::RecordInvalid => error 14 15 `@error = error.record` 16 17 `@errorには全てのバリデーションエラーが格納されてしまうので、クラス別に変数を用意して格納したい。` 18 `イメージとしてはこんな感じに・・・` 19 `@hoge = error.record` 20 `@fuga = error.record` 21 `@fugo = error.record` 22 23end 24``` 25 26```view 27<div> 28 <p>ほげほげ</p> 29 <%= hoge_error_message(:name) %> 30</div> 31 32<div> 33 <p>ふがふが</p> 34 <%= fuga_error_message(:name) %> 35</div> 36 37<div> 38 <p>ふごふご</p> 39 <%= fugo_error_message(:name) %> 40</div>
helper
1module ErrorMessageHelper 2 3 def hoge_error_message(attribute) 4 @hoge.errors[attribute].map{|error|"<p class=\"error_message\">" + error + "</p>"}.join("<br>").html_safe 5 end 6 7 def fuga_error_message(attribute) 8 @fuga.errors[attribute].map{|error|"<p class=\"error_message\">" + error + "</p>"}.join("<br>").html_safe 9 end 10 11 def fugo_error_message(attribute) 12 @fugo.errors[attribute].map{|error|"<p class=\"error_message\">" + error + "</p>"}.join("<br>").html_safe 13 end 14 15end
あなたの回答
tips
プレビュー