質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1047閲覧

複数レコードのバリデーションメッセージの表示方法がわかりません。

awa

総合スコア34

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2019/01/19 13:06

編集2019/01/19 13:10

バリデーション メッセージを全権表示させたいのですが、初めの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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

transactionを発生するためにsave!としていましたが、
更新処理を全レコード行ってから、バリデーション エラーがあったら任意で例外を起こすように変更して、解決できました。

投稿2019/01/20 13:06

awa

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問