#実装したこと
ビューファイルでimageカラムがnilだった時の判定をして表示するビューの切替。
アップローダー:carrierwave
最初は
index.html.haml
- if @user.image.nil?
%p 画像がまだ登録されていません。
- else
= image_tag @user.image
としたところ画像が無くてもPタグの内容が表示されなかった。
binding.pryで中身を確認したとこと
[1] pry(#<MachinesController>)> @user
=> #<User:0x00007f85e25cca00 id: 27, name: "画像なし", image: nil, created_at: Tue, 21 Jan 2020 08:28:09 UTC +00:00, updated_at: Tue, 21 Jan 2020 08:28:09 UTC +00:00>
nilだよなぁ。じゃあimageの中身見るか
[1] pry(#<MachinesController>)> @user.image
=> #<ImageUploader:0x00007f85e836eaf0
@cache_id=nil,
@file=nil,
@filename=nil,
@identifier=nil,
@model=#<User:0x00007f85e9c083b8 id: 27, name: "画像なし", image: nil, created_at: Tue, 21 Jan 2020 08:28:09 UTC +00:00, updated_at: Tue, 21 Jan 2020 08:28:09 UTC +00:00>,
@mounted_as=:image,
@staged=false,
@versions=nil>
なんかnilのはずなのにいっぱい入ってるやん!?
で調べてみたところ
https://teratail.com/questions/101330
に回答している方がいらっしゃって
「carrierwaveでは、uploaderをマウントしたアトリビュートにアクセスすると、
uploaderのオブジェクトを返すため、決してnilにはならないらしいです。」
とのこと。
なので、このページの回答の通りに
index.html.haml
- if @user.image.file.nil?
%p 画像がまだ登録されていません。
- else
= image_tag @user.image
にしたら無事に解決しました。
ちょっとややこしかったのでシェア。