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

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

ただいまの
回答率

89.52%

Railsでfields_forを使って複数の写真を投稿したい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 352

shinn_sora

score 7

今某フリマアプリのクローンサイトを作っているのですが写真を複数枚投稿したいのですがうまくデータベースに保存することができません。
今の状態をとしてはProductが親モデルでproduct_image子モデルです。

[1] pry(#<ProductsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"kyCkQIQm9Ze+EUoDs9+vU3n+ceZ4iB+zwZ8K3leUmv7YmfGN5pAVMHp0XuWBNBnLfZTP1Y5VLxVFaYvMW4Rc5Q==", "product"=><ActionController::Parameters {"product_images_attributes"=>{"0"=>{"image"=>[#<ActionDispatch::Http::UploadedFile:0x00007fc7698d9f68 @tempfile=#<Tempfile:/var/folders/5k/4m94gmtd0s153tdmqgr9gmth0000gn/T/RackMultipart20190303-4946-1cn6u8u.png>, @original_filename="phone.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"product[product_images_attributes][0][image][]\"; filename=\"phone.png\"\r\nContent-Type: image/png\r\n">, #<ActionDispatch::Http::UploadedFile:0x00007fc7698d9f18 @tempfile=#<Tempfile:/var/folders/5k/4m94gmtd0s153tdmqgr9gmth0000gn/T/RackMultipart20190303-4946-w3y2jr.png>, @original_filename="phone.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"product[product_images_attributes][0][image][]\"; filename=\"phone.png\"\r\nContent-Type: image/png\r\n">, #<ActionDispatch::Http::UploadedFile:0x00007fc7698d9ec8 @tempfile=#<Tempfile:/var/folders/5k/4m94gmtd0s153tdmqgr9gmth0000gn/T/RackMultipart20190303-4946-77rqyp.jpg>, @original_filename="phone.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"product[product_images_attributes][0][image][]\"; filename=\"phone.jpg\"\r\nContent-Type: image/jpeg\r\n">]}}, "name"=>"sasa", "description"=>"sasa", "category_id"=>"107", "size"=>"M", "brand"=>"", "product_status"=>"未使用に近い", "delivery_fee"=>"着払い", "local"=>"岩手", "lead_time"=>"2~3日で発送", "price"=>"300", "transaction_status"=>"出品中"} permitted: false>, "controller"=>"products", "action"=>"create"} permitted: false>
[2] pry(#<ProductsController>)> product
=> #<Product:0x00007fc76989a340
 id: 49,
 name: "sasa",
 description: "sasa",
 price: 300,
 likes_count: nil,
 size: "M",
 product_status: "未使用に近い",
 transaction_status: "出品中",
 delivery_fee: "着払い",
 local: "岩手",
 lead_time: "2~3日で発送",
 brand: nil,
 category_id: 107,
 created_at: Sun, 03 Mar 2019 13:32:32 UTC +00:00,
 updated_at: Sun, 03 Mar 2019 13:32:32 UTC +00:00>
[3] pry(#<ProductsController>)> product.product_images
  ProductImage Load (0.3ms)  SELECT `product_images`.* FROM `product_images` WHERE `product_images`.`product_id` = 49
=> [#<ProductImage:0x00007fc76229fd48
  id: 10,
  image: "[\"phone.png\", \"phone.png\", \"phone.jpg\"]",
  product_id: 49,
  created_at: Sun, 03 Mar 2019 13:32:32 UTC +00:00,
  updated_at: Sun, 03 Mar 2019 13:32:32 UTC +00:00>]
[4] pry(#<ProductsController>)> 


パラメータはこんな感じです。

product_controller

class ProductsController < ApplicationController

  def new
    @product = Product.new
    @product.product_images.build
    render layout: 'sell-form'
  end

  def middlecategory
    @middlecategory = Category.find(params[:category_id]).children
    respond_to do |form|
      # form.html{redirect_to new_product_path}
      form.json{@middlecategory}
    end
  end

  def smallcategory
  end

  def create
    product = Product.create(product_parameter)
    binding.pry
    redirect_to root_path
  end

  private
  def product_parameter
    params.require(:product).permit(:name, :description, :category_id, :size, :product_status, :delivery_fee, :local, :lead_time, :price, :transaction_status, product_images_attributes: {image: []})
  end
end


渡ってくるproduct_imageのimageをそれぞれちがうインスタンスとして保存したいのですが同じインスタンスの中に保存されてしまっているようです。
解決方法を教えてくださると嬉しいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 89.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる