繁体   English   中英

如何在 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM