Как получить доступ к временному файлу ActiveStorage в модели Rails? - PullRequest
1 голос
/ 16 февраля 2020

Я пытаюсь изменить размер своих изображений перед загрузкой их с помощью 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 в модели?

Спасибо за любую помощь.

1 Ответ

1 голос
/ 17 февраля 2020

В качестве альтернативы вы можете создать услугу

# 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
...