複数同時にプレビューした画像をアップロード、DBに保存したいのですが、上手くいきません。
multiple: trueやparams.require(:item).permit(:name, item_images_attributes: {images: []})など複数同時にアップロード、保存するのに必要そうなコードは使ってもダメでした。
コードの記入の仕方がおかしいのか、まだ記入したりないコードがあるのかどうかご教授いただければ幸いです。
よろしくお願いします。
new.html.erb
html
1<%= form_for @item do |f| %> 2 <main class="single-main"> 3 <section class="l-single-container buy-item-container"> 4 <div data-reactroot=""> 5 <div class="sell-container-inner"> 6 <h2 class="l-single-head">商品の情報を入力</h2> 7 <form class="sell-form"> 8 <div class="sell-upload-box"> 9 <h3 class="sell-upload-head">画像 10 <span class="form-require">必須</span> 11 </h3> 12 <p>2枚までアップロードできます</p> 13 <div class="sell-dropbox-container clearfix"> 14 <div class="sell-upload-items have-item", id="items"> 15 <%= f.fields_for :item_images do |image| %> 16 <ul id="item"> 17 <li class="sell-upload-item"> 18 <div class="sell-upload-item-1"> 19 <figure class="sell-upload-figure figure-1"> 20 <img> 21 <input type="file" class="sell-upload-drop-file" multiple="multiple" name="image[]" style="display: none"> 22 <pre class="visible-pc-1">ドラッグアンド<br>ドロップ<br>またはクリックして<br>ファイルを<br>アップロード</pre> 23 <%=image.file_field :image %> 24 </figure> 25 </div> 26 </li> 27 <li class="sell-upload-item"> 28 <div class="sell-upload-item-2"> 29 <figure class="sell-upload-figure figure-2"> 30 <img> 31 <input type="file" class="sell-upload-drop-file" multiple="multiple" name="image[]" style="display: none"> 32 <pre class="visible-pc-2">ドラッグアンド<br>ドロップ<br>またはクリックして<br>ファイルを<br>アップロード</pre> 33 <%= image.file_field :image %> 34 </figure> 35 </div> 36 </li> 37 </ul> 38 <% end %> 39 </div> 40 </div> 41 </div> 42 <div class="sell-content"> 43 <div class="form-group"> 44 <%= f.label :商品名 %> 45 <span class="form-require">必須</span> 46 <div> 47 <%= f.text_field :name, class: "input-default", value: "", placeholder: "商品名(必須 40文字まで)" %> 48 </div> 49 </div> 50 </div> 51 <button type="submit" class="btn-default btn-red">アップロード</button> 52 <a href="/" class="btn-default btn-gray">もどる</a> 53 </form> 54 <div class="overlay"></div> 55 </div> 56 </div> 57 </section> 58 </main> 59 <% end %> 60
items_controller.rb
class ItemsController < ApplicationController def index end def new @item = Item.new @item.item_images.build end def show end def create @item = Item.new(item_params) if @item.save redirect_to :root else render :new end end private def item_params params.require(:item).permit( :name, item_images_attributes: :images ) end end
item_image.rb
class ItemImage < ApplicationRecord belongs_to :item mount_uploader :image, ImageUploader validates :image, presence: true end
item.rb
class Item < ApplicationRecord has_many :item_images, dependent: :destroy accepts_nested_attributes_for :item_images validates :name, presence: true end
追記
new.html.erb
<input type="file" class="sell-upload-drop-file" multiple="multiple" name="image" style="display: none">のname="image"を、name="image[]"に変更
他にもname="image-1"や"image-2"と名前を別々にして試しました。
<%= image.file_field :image, multiple: "true" %>を、<%= image.file_field :image %>に変更。
paramsを受け取れなかったため。
items_controller.rb
item_images_attributes: {images: []}を、item_images_attributes: :imagesに変更。
上記同様、paramsを受け取れなかったため。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/21 00:34
2018/11/21 01:48
2018/11/21 02:18
2018/11/21 05:39
2018/11/21 21:36