[Rails] [ActiveStorage] Überprüfen Sie, ob ein bestimmter Benutzer einen Avatar hat

Wenn ein Benutzer keinen Avatar hat, wird beim Versuch, auf "user.avatar" zuzugreifen, eine Ausnahme ausgelöst. Um dies zu verhindern, überprüfen Sie im Voraus, ob die Datei als "user.avatar.attached?" Angehängt ist.

class User < ApplicationRecord
  has_one_attached :avatar
end

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

#Eine Ausnahme tritt auf, wenn versucht wird, ohne Anhang zuzugreifen
user.avatar.url
=> Module::DelegationError: url delegated to attachment, but attachment is nil

#Dies kann wie folgt vermieden werden
user.avatar.url if user.avatar.attached?
=> nil

Hinweis: Dieses Commit wird jetzt so behandelt, dass keine Ausnahme ausgelöst wird https://github.com/rails/rails/commit/f002be148e1377709ed28b8e80c5db76ee2fa410

Nachtrag: Bestätigen Sie, dass das obige Commit in v6.1.0.rc1 enthalten ist

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

# Rails 6.1.0.rc1 wurde behoben, damit keine Ausnahme auftritt
user.avatar.url
=> nil

Referenz-URL

Schienenführung https://railsguides.jp/active_storage_overview.html

Recommended Posts

[Rails] [ActiveStorage] Überprüfen Sie, ob ein bestimmter Benutzer einen Avatar hat
Rails6 Benutzer mit 'id' = sign_out konnte nicht gefunden werden und kann sich nicht abmelden
Rails6 OmniAuth activestorage Benutzerbild abrufen
if ~ .length! = 0 Finde einen leeren Wert
[Ruby on Rails] Fehler, bei dem Benutzer mit ... nach dem Abmelden nicht gefunden werden konnte