0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

accepts_nested_attributes_for を使ってネスト先に画像保存しようとしたらNULLで保存できないときに見て欲しい!

Posted at

数時間解決できなかったので備忘録として書きます。

前提:

・Rails5
・accepts_nested_attributes_for でネストしている画像なども一緒に保存・更新する様に記述している
・carrierwaveを使っている
・NotNullViolation(Mysql2::Error: Column 'image' cannnot be null: INSERT INTO~~~)
 というエラー文が出ていてVALUESには確かにNULLって書いてある
・paramsが以下の様に出ていてインスタンスになっていない

parameters: {(省略)"3"=>{"image"=>"C:\\fakepath\\〇〇〇〇.jpg"}

そして画像が保存できない!

何が起きてるの?:

上記の状態は画像の名前部分(しかもセキュリティ上の問題でfakepathという仮のパス!)しか取得していないという状態です。
欲しい部分(画像のデータとなるところなどなど)が無いのでNULL扱いなんだと思います。
https://qiita.com/shizuma/items/6f56ca442111ece021b5
上記のものすごく有難い記事の様に f.fields_for を使っていてそのスコープ内であれば起きない現象です。
なぜなら multipart: trueというオプションが記載なしで実行されているからです。
このオプションの無い場合は、画像の名前しか得てくれないんですね。今回の問題はこれです。
form_tagで画像を受ける場合は必須の様です。
javascriptなどでフォームを後から追加する仕様にしていたため、私は記載がなく引っかかりました

対処法:

form 部分に multipart: trueのオプションを加えるだけです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?