バリデーション メッセージを全権表示させたいのですが、初めの1件しか表示されません。
フォームから一括更新をするのに、バリデーションエラーになると更新がされないようトランザクション処理を実装しました。
初めの1件しか表示されない原因は、
例外が1件発生するとすぐにrender処理でビューに飛ばされてしまうためだと認識しています。
すぐにビューに飛ばすのではなく、バリデーションエラーをためてからビューに飛ばしたいのですが、
どのようにコーディングすれば良いかわからず手が止まっています。
ご教授いただけないでしょうか。
ruby
1【editビュー】 2・・・ 3<%= fields_for "time_cards[]", time_card do |f| %> 4<% if object.errors.any? %> 5 <div id="error_explanation"> 6 <div class="alert alert-danger"> 7 エラーが <%= pluralize(object.errors.count, "箇所あります。") %> 8 </div> 9 <ul> 10 <% object.errors.full_messages.each do |msg| %> 11 <li><%= msg %></li> 12 <% end %> 13 </ul> 14 </div> 15<% end %> 16<% end %> 17・・・
ruby
1【コントローラー】 2def update 3 @time_cards = TimeCard.where(id: time_card_params.keys).order('date') 4 ActiveRecord::Base.transaction do 5 @time_cards.each do |time_card| 6 time_card.attributes = time_card_params["#{time_card.id}"] 7 time_card.save!(context: :edit) 8 end 9 end 10 flash[:success] = "完了しました。" 11 redirect_to action: 'show', user_id: params[:id], year: params[:year], month: params[:month] 12 rescue => e 13 render action: :edit 14end
以下の質問で回答頂いた方が、補足で書いてくださった内容の2を実現しようとしてtransactionをつけました。
1の実現に困っています。
https://teratail.com/questions/168495
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。