class ImageUpload < ApplicationRecord belongs_to :user, optional: true belongs_to :content, polymorphic: true # This is the old way we uploaded files -- now we're transitioning to ActiveStorage's has_one_attached has_attached_file :src, path: 'content/uploads/:style/:filename', styles: { thumb: '100x100>', small: '190x190#', square: '280x280#', medium: '300x300>', large: '600x600>', hero: '800x800>' }, filename_cleaner: -> (filename) { [ SecureRandom.uuid, File.extname(filename).downcase ].join } # has_one_attached :upload validates_attachment_content_type :src, content_type: /\Aimage\/.*\Z/ # TODO add size validation before_destroy :delete_s3_image # Point content IDs to generalized content_id for cocoon alias_attribute 'character_id', :content_id #alias_attribute ... def delete_s3_image # todo: put this in a task for faster delete response times src.destroy end end