我正在尝试调整图像的大小,然后再使用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.(params[:cat][:images], '1200x1200')
if @cat.save
...
end
end