1
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 3 years have passed since last update.

アップロードした画像の有無の判定

Posted at

#実装したこと
ビューファイルで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

にしたら無事に解決しました。

ちょっとややこしかったのでシェア。

1
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
1
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?