あるuserがavatarを持っていない場合、 user.avatar
にアクセスしようとすると例外が発生する。これを防ぐには user.avatar.attached?
として事前にファイルが添付されているか調べるようにする。
class User < ApplicationRecord
has_one_attached :avatar
end
user = User.last
user.avatar.attached?
=> false
# 添付がないのにアクセスしようとすると例外が発生
user.avatar.url
=> Module::DelegationError: url delegated to attachment, but attachment is nil
# 以下のようにすることで回避できる
user.avatar.url if user.avatar.attached?
=> nil
メモ:このコミットで例外が発生しないように対応されるよう
https://github.com/rails/rails/commit/f002be148e1377709ed28b8e80c5db76ee2fa410
追記:v6.1.0.rc1に上記コミットが入っていることを確認
user = User.last
user.avatar.attached?
=> false
# Rails 6.1.0.rc1 では例外発生しないように対応済み
user.avatar.url
=> nil
参考URL
Railsガイド
https://railsguides.jp/active_storage_overview.html