😊

get_profile_image(width, height)

2023/07/30に公開
2

前提

・active_storageをインストール済み
・gem 'image_processing', '~> 1.2'を適用済み
・app/assets/images内に NoImage.jpgを挿入済み
・userモデルに has_one_attached :profile_image を記入済み

https://zenn.dev/airiin/articles/0e995165dae69f

コード

user.rb


def get_profile_image(width, height)
	unless profile_image.attached?
		file_path = Rails.root.join('app/assets/images/NoImage.jpg')
		profile_image.attach(io: File.open(file_path), filename: 'default-image.jpg', content_type: 'image/jpg')
	end 
	
	profile_image.variant(resize_to_limit: [width, height]).processed
	end 
end 

Discussion

WINNE THE POOHWINNE THE POOH
def get_image
   unless image.attached?
     file_path = Rails.root.join('app/assets/images/no_image.jpg')
     image.attach(io: File.open(file_path), filename: 'default-image.jpg', content_type: 'image/jpeg')
   end
   image
 end

サイズを引数に指定しない場合は、こちらの書き方をします。

WINNE THE POOHWINNE THE POOH
  def get_group_image
    (group_image.attached?) ? group_image : 'no_image.jpg'
  end

このように書いてもOKです。

このメソッドは、group_imageがアタッチされている(存在する)かどうかをチェックします。もしgroup_imageがアタッチされているなら、それを返します。もしgroup_imageがアタッチされていないなら、'no_image.jpg'という文字列を返します。

注意点:このメソッドは、group_imageが存在しない場合に文字列を返します。ビューでこのメソッドの結果を表示する場合、group_imageが存在しない時は文字列を直接表示しようとします。これはgroup_imageが画像のURLやパスである場合には問題ありませんが、それ以外の場合はエラーになる可能性があります。