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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

2回答

3614閲覧

Rails + CarrierWaveで複数のデータ保存時にエラー

lyzmfeqpxs54

総合スコア237

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

1グッド

0クリップ

投稿2017/12/05 07:32

いつもお世話になります。
下記サイトを参考にCarrierWaveで複数の画像を保存しようとしているのですがエラーが出てしまいます。公式サイトにも同じ方法が載っていたのでどこかに問題があるとは思うのですが、なかなか解決できずにこちらに質問させていただきました。

エラーはコントローラ側の
@post = Post.new(post_params)
の行で
TypeError (no implicit conversion of nil into String):
というエラーです。

ビュー側のmultiple: trueをfalseにし、POSTするデータを一つだけとすれば、コントローラ側を
params.permit(:poster_name, :post_text, :post_image)
として、普通にデータを保存することができる状態です。

データベースにSqLiteを使っているためJSON型のカラムを使用できないためstring形式としています。

不勉強で申し訳ございませんが、ご教示のほどお願いいたします。

参考サイト
https://qiita.com/ggtmtmgg/items/ba5f275c122c83013ea1

carrierwave公式
https://github.com/carrierwaveuploader/carrierwave#adding-versions

Ruby

1#エラー内容 2 3TypeError (no implicit conversion of nil into String): 4 5 6#コントローラー側 7 8 def update 9 @post = Post.new(post_params) 10 @post.save 11 end 12 def post_params 13 params.permit(:poster_name, :post_text, {post_image: []}) 14 end 15 16 17 18#ビュー側 19 20<%= form_with(model: @user_info, local: true, html: {id: 'inform_save', class: 'form', autocomplete: 'off'}) do |f| %> 21 <div class="field"> 22 <%= f.label :poster_name, "投稿者名" %> 23 <%= f.text_field :poster_name, size: 25, value: "", id: "poster_name", class: "poster_name" %> 24 </div> 25 <div class="field"> 26 <%= f.label :post_text, "投稿内容" %> 27 <%= f.text_field :post_text, size: 25, value: "", id: "post_text", class: "post_text" %> 28 </div> 29 <div class="field"> 30 <%= f.label :post_image %> 31 <%= f.file_field :post_image, multiple: true, class: 'post_image', id: :post_image %> 32 </div> 33 <div class="actions"> 34 <%= f.submit '送信' %> 35 </div> 36<% end %> 37 38 39 40#モデル側 41 42mount_uploader :post_image, ImagesUploader 43serialize :post_image, JSON 44
tacro👍を押しています

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

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

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

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

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

guest

回答2

0

自己解決

モデル側

mount_uploader :post_image, ImagesUploader
serialize :post_image, JSON

部分ですが
mount_uploader → mount_uploaders (最後にsが必要)

とすることで解決できました。
初歩的なことでお手数をおかけし申し訳ございません。

投稿2017/12/06 06:37

lyzmfeqpxs54

総合スコア237

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

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

0

binding.pryでデータの流れを見てみてはいかがでしょうか?

投稿2017/12/05 08:25

kenny_sayama

総合スコア1036

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

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

lyzmfeqpxs54

2017/12/06 02:24

ご回答ありがとうございます。 params.permit(:poster_name, :post_text, {post_image: []})の下でbinding.pryとした所、 params.permitで{ "poster_name"=>"xx","post_text"=>"xx", "post_image"=> [#<ActionDispatch::Http::UploadedFile:0x007fb1ec072010 @content_type="image/png", @headers="Content-Disposition: form-data; name=\"post_image[]\"; filename=\"xxxx.png\"\r\nContent-Type: image/png\r\n", @original_filename="xxxx.png", @tempfile=#<File:/tmp/RackMultipart20171206-31752-1boz0zs.png>>, #<ActionDispatch::Http::UploadedFile:0x007fb1ec071fc0 @content_type="image/png", @headers="Content-Disposition: form-data; name=\"post_image[]\"; filename=\"yyyy.png\"\r\nContent-Type: image/png\r\n", @original_filename="yyyy.png", @tempfile=#<File:/tmp/RackMultipart20171206-31752-v4cgnt.png>>], "commit"=>"送信"} となっており、正しくパラメータを取れているように思えるのですが、@postはnilになっている状況です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問