[Rails] [ActiveStorage] Découvrez si un utilisateur particulier possède un avatar

Si un utilisateur n'a pas d'avatar, une exception sera lancée lors de la tentative d'accès à user.avatar. Pour éviter cela, vérifiez si le fichier est préalablement joint en tant que `user.avatar.attached?

class User < ApplicationRecord
  has_one_attached :avatar
end

user = User.last
user.avatar.attached?
=> false

#Une exception se produit lors de la tentative d'accès sans pièce jointe
user.avatar.url
=> Module::DelegationError: url delegated to attachment, but attachment is nil

#Cela peut être évité en procédant comme suit
user.avatar.url if user.avatar.attached?
=> nil

Remarque: ce commit sera traité pour ne pas déclencher d'exception https://github.com/rails/rails/commit/f002be148e1377709ed28b8e80c5db76ee2fa410

Postscript: confirmez que le commit ci-dessus est inclus dans la v6.1.0.rc1

user = User.last
user.avatar.attached?
=> false

# Rails 6.1.0.rc1 a été corrigé afin qu'aucune exception ne se produise
user.avatar.url
=> nil

URL de référence

Guide des rails https://railsguides.jp/active_storage_overview.html

Recommended Posts

[Rails] [ActiveStorage] Découvrez si un utilisateur particulier possède un avatar
Rails6 Impossible de trouver l'utilisateur avec "id" = sign_out et ne peut pas se déconnecter
Rails6 OmniAuth activestorage Obtenir l'image de l'utilisateur
if ~ .length! = 0 Trouver une valeur vide
[Ruby on Rails] Erreur qui n'a pas pu trouver l'utilisateur avec ... après la déconnexion