前提・実現したいこと
railsでポートフォリオを作成しています。viewはslimで記述しています。
作品を投稿する機能を実装中に画像を複数枚アップロードできるように実装しようとcocoonを使いました。
発生している問題・エラーメッセージ
ですが追加ボタンを押して出た要素に画像を入れてもパラメータに値が入らずDBに保存できませんでした。
Parameters: {"utf8"=>"✓", "authenticity_token"=>"LXM4++79Y0Cwxbh2+bFsSVLBAunNYbyx6V69PcAP5xNQuTvGEZcPY362Sxhg44O5R19FKeQrHkXa1Li/EXN39Q==", "portfolio"=>{"title"=>"c", "software"=>"", "subject"=>"", "start_time"=>"2020-02-13", "end_time"=>"", "description"=>"c", "hp_url"=>"", "youtube_url"=>"", "github_url"=>"", "note"=>"", "sort"=>""}, "commit"=>"保存する"}
該当のソースコード
model
1class Portfolio < ApplicationRecord 2 has_many :portfolio_images, dependent: :destroy 3 before_validation :sort_num, if: :check_sort? 4 5 accepts_nested_attributes_for :portfolio_images, allow_destroy: true, reject_if: :all_blank 6end
model
1class PortfolioImage < ApplicationRecord 2 belongs_to :portfolio 3 mount_uploader :image, ImageUploader 4end
view
1**_form.html.slim** 2 3table.table.admin_portfoio 4 = form_with model: portfolio, url: url_path, local: true do |f| 5 ... 省略 ... 6 tr 7 th = f.label '画像' 8 td 9 .image_area 10 = f.fields_for :portfolio_images do |image| 11 = render 'portfolio_image_fields', f: image 12 .link 13 = link_to_add_association '画像を追加', f, :portfolio_images, partial: 'portfolio_image_fields', class: 'btn btn-primary',data: { association_insertion_node: '.image_area', association_insertion_method: 'append'} 14 15 ... 省略 ... 16 17 td colspan=2 = f.submit '保存する', class: "form_button", data: {disable_with: '保存中…'} 18 tr.button 19 td colspan=2 = button_to '戻る', admin_portfolio_index_path, class: "form_button", method: :get
view
1**_portfolio_image_fields.html.slim** 2 3.nested-fields 4 = f.file_field :image 5 = link_to_remove_association '画像の削除', f, class: 'btn btn-danger'
controller
1 **portfolio_controller.rb** 2 3 def new 4 @portfolio = Portfolio.new 5 #@portfolio.portfolio_images.build 6 end 7 8 def create 9 @portfolio = Portfolio.new(portfolio_params) 10 11 if @portfolio.save 12 flash.now[:success] = "データの保存に成功しました" 13 redirect_to admin_portfolio_index_path 14 else 15 flash.now[:error] = "データの保存に失敗しました" 16 render :new 17 end 18 end 19... 省略 ... 20 21private 22 def portfolio_params 23 params.require(:portfolio).permit(:title, :software, :subject, :start_time, :end_time, :description, :note, :hp_url, :youtube_url, :github_url, :sort, portfolio_images_attributes: [:id, :image, :_destroy]) 24 end
試したこと
newのコメント部分(build)を使うと1つは保存されますが、ボタンで追加したものは保存されません。
あなたの回答
tips
プレビュー