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

问题描述 投票:1回答:1

我正在尝试调整图像的大小,然后再使用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吗?

感谢您的帮助。

ruby-on-rails temporary-files rails-activestorage minimagick
1个回答
0
投票

或者您可以创建服务

# 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
© www.soinside.com 2019 - 2024. All rights reserved.