如何访问 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
我正在尝试调整图像大小,然后再使用 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