如何访问 Rails 模型中的 ActiveStorage 临时文件?

How to access ActiveStorage tempfile in Rails model?

我正在尝试调整图像大小,然后再使用 Rails' ActiveStorage 上传它们。以下控制器操作非常有效:

class CatsController < ApplicationController

  require 'mini_magick'

  def create
    @cat = current_user.cats.new(cat_params)

    params[:cat][:images].each do |image|
      mini_image = MiniMagick::Image.new(image.tempfile.path)
      mini_image.resize '1200x1200'
    end

    if @cat.save
      ...
    end
  end

end

但我想让我的控制器保持纤细,并将此功能移至模型中。但是当我这样做时,Rails 在模型中找不到 tempfile

是不是完全没有办法在模型中访问tempfile

感谢您的帮助。

或者您可以创建服务

# app/services/image_resizer.rb

class ImageResizer
  def self.call(images, size)
    Array(images).each do |image|
      i = MiniMagick::Image.new(image.tempfile.path)
      i.resize size
    end
  end
end

def create
  @cat = current_user.cats.new(cat_params)
  ImageResizer.call(params[:cat][:images], '1200x1200')

  if @cat.save
    ...
  end
end