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

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

新規登録して質問してみよう
ただいま回答率
85.48%
RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1330閲覧

【Rails4】Paperclipを利用した登録フォームで、1回で画像を複数uploadしたい

abab7200

総合スコア120

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2017/09/19 13:08

編集2017/09/20 23:55

Paperclipで画像を複数投稿できるフォームを設定したいのですが、
multiple: trueを設定すると、controller側で値がNillになり、DBでもデータ登録ができておりません。 どなたかフォーム上で複数uploadが可能になる方法をご教授いただければと存じます

バージョン
Rails4
Ruby2.1

Picture model

class Picture < ActiveRecord::Base has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" } validates_attachment :avatar, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } end

Picture controller

class PicturesController < ApplicationController def index @pictures = Picture.all end def new @picture = Picture.new end def create @picture = Picture.new(picture_params) byebug if @picture.save redirect_to dashboards_path else render 'new' end end private def picture_params params.require(:picture).permit(:name, :photo, :avatar) end end

Picture new.html.slim

= simple_form_for @picture, url: pictures_path do |form| = form.file_field :avatar, as: :file , multiple: true = form.submit "送信"

byebugした際のcreate処理で渡されるパラメーター

11: def create 12: @picture = Picture.new(picture_params) 13: byebug => 14: if @picture.save 15: redirect_to dashboards_path 16: else 17: render 'new' 18: end (byebug) (byebug) @picture #<Picture id: nil, name: nil, string: nil, created_at: nil, updated_at: nil, photo_file_name: nil, photo_content_type: nil, photo_file_size: nil, photo_updated_at: nil, avatar_file_name: nil, avatar_content_type: nil, avatar_file_size: nil, avatar_updated_at: nil>

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

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

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

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

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

guest

回答1

0

ベストアンサー

multiple: trueオプションを使用するとparams[:avatar]に配列が格納されることになりますので
strong parameterも以下の様に配列に対応させる必要があります。

params.require(:picture).permit( :name, :photo, {avatar: []})

createメソッド内でも渡ってきた配列に対してループさせてあげる必要があります。

ruby

1def create 2 picture_params[:avatar].each do |a| 3 picture = Picture.new(picture_params.clone.merge({avatar: a})) 4 picture.save 5 end 6end

投稿2017/09/21 21:12

y_y3

総合スコア179

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

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

abab7200

2017/09/21 23:00

y_y3様ご回答ありがとうございます。 夜に試してみます。
abab7200

2017/09/22 10:10

頂いた内容で複数選択、投稿ができるようになりました! 大変助かりましたありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問