Lesson(model)
がLessonImage(model、画像です)
との間に以下の関連付けを持っています。
LessonImage
は画像で、Carrierwave
を利用し、新規にLesson
を作成する際に、accepts_nested_attributes_for
とfields_for
を使って同時に子レコードであるLessonImage
も作成しています。
問題は、Lessonが所有するLessonImageの写真を0-3枚としているのですが、以下の通り、new(create)の際に写真を3枚uploadしないと、その後に当該lessonをedit(update)する際に、new(create)の際にuploadした写真の数しか編集ができないことです。
実現したいことは、new(create)の際に写真を例えば1枚だけuploadし、その後にedit(update)する際に2枚追加できるようにしたい(つまり、デフォルトで常に3つファイルを選択
ボタンが並んでいる様にしたい)のですが、やり方がわからずご教示頂けますと幸甚です。
ruby
1関連付け 2#Lesson Model 3has_many :lesson_images, dependent: :destroy 4accepts_nested_attributes_for :lesson_images, allow_destroy: true 5 6#LessonImage Model 7 belongs_to :lesson, optional: true(#Rails 5.0.0.1を利用)
ruby
1#lessons_controller.rb 2def new 3 @lesson = Lesson.new(posted_at: Time.current) 4 3.times{@lesson.lesson_images.build} 5 end 6 7 def edit 8 @lesson = current_user.adviser.lessons.find(params[:id]) 9 end 10 11 def create 12 @lesson = Lesson.new(lesson_params) 13 @lesson.adviser = current_user.adviser 14 @lesson.posted_at = Time.current 15 if @lesson.save 16 redirect_to [current_user, :user_lessons] 17 else 18 flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。' 19 render "new" 20 end 21 end 22 23 def update 24 @lesson = current_user.adviser.lessons.find(params[:id]) 25 @lesson.assign_attributes(lesson_params) 26 if @lesson.save 27 redirect_to [current_user, :user_lesson] 28 else 29 flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。' 30 render "edit" 31 end 32 end
ruby
1#new.html.erb 2<%= form_for [:user, @lesson] do |f| %> 3<%= render "form", f: f %> 4<%= f.submit '作成する' %> 5 6#edit.html.erb 7<%= form_for [:user, @lesson], url: :user_user_lesson, html: {multipart: true} do |f| %> 8 <%= render "form", f: f %> 9 <%= f.submit "編集する" %> 10 11#_form.html.erb 12<%= f.label :title, "レッスン名" %> 13<%= f.text_field :title %>等、lessonモデルのcolumnが並びます。 14 <%= f.fields_for :lesson_images do |limg|%> 15 <%= limg.label :lesson_image, "レッスン写真" %> 16 <%= limg.file_field :lesson_image, class:"form-control-file", id:"exampleInputFile" %> 17 <% end %>
newにて1つしか画像をアップロードしなかった場合、当該レッスンをeditする画面で、ファイルを選択は1つしか表示されない。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/12 13:59