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

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

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

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

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Q&A

0回答

1932閲覧

carrierwaveで画像を複数アップロードし、DBに保存

potter9610

総合スコア4

Ruby on Rails 5

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

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

0グッド

1クリップ

投稿2019/08/18 09:04

編集2019/08/18 09:06

前提・実現したいこと

carrierwaveで画像を複数アップロードし、DBに保存
商品を保存するitemsテーブルと、画像を保存するphotosテーブルがあります
railsで複数の画像を持った商品出品機能を実装しようとしているのですが、画像を複数枚選択し、保存しようとしても保存されません。
一枚でも保存できませんでした。
エラーは発生していません。

該当のソースコード

sample.html.haml

.product_listing_content = render "user-shared/user-header" .product_listing_box .product_listing_title 商品の情報を入力 = form_with(model: @item, local: true, multipart: true) do |f| .upload_box .upload_text .upload_header 出品画像 .upload_require 必須 %p 最大10枚までアップロードできます = fields_for :photos do |i| = i.label :img, class: "image_label", for: "image" do .upload_image = i.file_field :img, name: "photos[img][]", multipart: true, class: "file_field", id: "image" %pre.image_text

sample.controller.rb

class ItemsController < ApplicationController def index end def new @category = Category.all.order("id ASC").limit(13) @postage = Postage.all.order("id ASC").limit(2) @prefecture = Prefecture.all @postage_day = PostageDay.all @state = State.all @item = Item.new @item.photos.build end def category_children @category_children = Category.find(params[:productcategory]).children end def category_grandchildren @category_grandchildren = Category.find(params[:productcategory]).children end def postage_children @postage_children = Postage.find(params[:postageitem]).children end def create @item = Item.new(item_params) @item.save redirect_to root_path end def show @search_params = user_search_params @prefecrure = Prefecture.all end private def user_search_params params.fetch(:search, {}).permit(:id,:prefecture) end def item_params params.require(:item).permit(:state_id, :name, :explain, :category_id, :price, :postage_id, :prefecture_id, :postage_day_id, photos_attributes: [:id, {img: []}, :item_id]).merge(user_id: 1, buyer_id: 1, shipping_date: 1, size_id: 1, brand_id: 1) end end

item.rb

has_many :photos accepts_nested_attributes_for :photos

photo.rb

class Photo < ApplicationRecord belongs_to :item, optional: true mount_uploaders :img, PhotoUploader end

ターミナル
Started POST "/items" for ::1 at 2019-08-18 18:01:57 +0900
Processing by ItemsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"2r9aGxEbvqaTm+BMmz+lK0JBnYoHAwPRQrGqWsDwyH4sdND3LI8sz3zlA7z6rEX+N0Wx6YT2449ZfO+bd48peQ==", "photos"=>{"img"=>[#<ActionDispatch::Http::UploadedFile:0x00007fd08ac458a8 @tempfile=#Tempfile:/var/folders/tf/jtyh4t1n2k913fhwch5fqvxh0000gn/T/RackMultipart20190818-43340-mv15n2.jpg, @original_filename="book1.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name="photos[img][]"; filename="book1.jpg"\r\nContent-Type: image/jpeg\r\n">]}, "item"=>{"name"=>"p", "explain"=>"p", "category_id"=>"100", "state_id"=>"1", "postage_id"=>"8", "prefecture_id"=>"1", "postage_day_id"=>"1", "price"=>"1000"}, "commit"=>"出品する"}

From: /Users/nakagawashuuma/Desktop/mercari/freemarket_sample_56b/app/controllers/items_controller.rb @ line 38 ItemsController#create:

36: def create 37: @item = Item.new(item_params)

=> 38: binding.pry
39: @item.save
40: # @photo = Photo.new(photo_params)
41: # binding.pry
42: # @photo.save
43: redirect_to root_path
44: end

[1] pry(#<ItemsController>)> @item = Item.new(item_params)
=> #<Item:0x00007fd0923795c8
id: nil,
name: "p",
explain: "p",
state_id: 1,
price: 1000,
buyer_id: 1,
prefecture_id: 1,
shipping_date: 1,
size_id: 1,
brand_id: 1,
user_id: 1,
created_at: nil,
updated_at: nil,
category_id: 100,
postage_id: 8,
postage_day_id: 1>
[2] pry(#<ItemsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"2r9aGxEbvqaTm+BMmz+lK0JBnYoHAwPRQrGqWsDwyH4sdND3LI8sz3zlA7z6rEX+N0Wx6YT2449ZfO+bd48peQ==", "photos"=>{"img"=>[#<ActionDispatch::Http::UploadedFile:0x00007fd08ac458a8 @tempfile=#Tempfile:/var/folders/tf/jtyh4t1n2k913fhwch5fqvxh0000gn/T/RackMultipart20190818-43340-mv15n2.jpg, @original_filename="book1.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name="photos[img][]"; filename="book1.jpg"\r\nContent-Type: image/jpeg\r\n">]}, "item"=><ActionController::Parameters {"name"=>"p", "explain"=>"p", "category_id"=>"100", "state_id"=>"1", "postage_id"=>"8", "prefecture_id"=>"1", "postage_day_id"=>"1", "price"=>"1000"} permitted: false>, "commit"=>"出品する", "controller"=>"items", "action"=>"create"} permitted: false>
[3] pry(#<ItemsController>)> params[:photos][:img]
=> [#<ActionDispatch::Http::UploadedFile:0x00007fd08ac458a8
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name="photos[img][]"; filename="book1.jpg"\r\nContent-Type: image/jpeg\r\n",
@original_filename="book1.jpg",
@tempfile=#File:/var/folders/tf/jtyh4t1n2k913fhwch5fqvxh0000gn/T/RackMultipart20190818-43340-mv15n2.jpg>]
[4] pry(#<ItemsController>)>

複数画像選択しているのですが、params に入っているのは最後に選択した一つだけです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問