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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

2628閲覧

new->createでsaveされずにnewに戻った際に、画像アップロードのformが消えてしまう

innjera

総合スコア132

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/05/05 03:41

以下の通りのformにて、validation等に失敗して、newに戻ると、最初のnewの時にはあった画像upload用のfile_fieldが消えてしまいます。(写真ご参照ください)

controllerの記載に誤りがあるのでしょうか? 解決策わからず、お分かりの方、ご教示頂けますと助かります。

初回のnew画面(ファイルを選択ボタンが3つあります)

イメージ説明

newにredirectした際の画面(ファイルを選択ボタンが消えてしまいました)

イメージ説明

ruby

1#controller 2 def new 3 @lesson = Lesson.new 4 t = 3 - @lesson.lesson_images.size.to_i 5 t.times{@lesson.lesson_images.build} 6 end 7 8 def create 9 @lesson = Lesson.new(lesson_params) 10 @lesson.adviser = current_user.adviser 11 if @lesson.save 12 redirect_to [current_user, :user_lessons] 13 else 14 flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。' 15 render "new" 16 end 17 end

ruby

1#form 2<div class="form-group"> 3 <div class="col-12 text-left mb-1"> 4 <div class="bg-danger text-white text-center"> 5 <small>レッスンの内容が分かる写真をアップロードしてください</small><br/> 6 <small>1番上の写真がTopに表示されます。</small> 7 </div> 8 </div> 9 </div> 10 <%= f.fields_for :lesson_images do |img|%> 11 <div class = "col-xs-12 text-xs-left"> 12 <% if img.object.lesson_image? %> 13 <%= image_tag img.object.lesson_image.url, class: 'lesson-img-edit' %> 14 &nbsp&nbsp<%= img.check_box :remove_lesson_image %>画像を削除する<br> 15 <% end %> 16 <%= img.label :lesson_image, "レッスン写真", class:"btn btn-danger disabled btn-sm", class: 'lesson-img-edit' %> 17 <%= img.file_field :lesson_image, class:"form-control-file", id:"exampleInputFile" %> 18 <hr> 19 </div> 20 <% end %>

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

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

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

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

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

guest

回答1

0

3つのファイルフィールドを作成しているのは new アクションの以下の部分です。

ruby

1 t = 3 - @lesson.lesson_images.size.to_i 2 t.times{@lesson.lesson_images.build}

createアクションでは、入力フォームからLessonオブジェクトを生成していますが、ファイルが一つも添付されていない場合には、関連するLessonImageオブジェクトは作成されません。

そのため、そのまま画面を表示しようとすると、@lesson.lesson_imagesは空配列となり、以下の部分がループしなくなるためにファイルフィールドが表示されないのだと思います。

<%= f.fields_for :lesson_images do |img|%>

投稿2017/05/05 12:55

kenchankunsan

総合スコア240

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問