Как изменить размер и отобразить изображение в рельсах с помощью минимагика? - PullRequest
0 голосов
/ 02 февраля 2020

Я новичок в рельсах и застрял в проблеме, которую я думал, будет довольно прямо Я хотел бы загрузить изображение, изменить его размер и отобразить изображение с измененным размером. Я могу загрузить с помощью carrierwave, но при попытке изменить его размер и отобразить с помощью mini_magick все идет не так! На основе документов mini_magick я создал в своем классе метод для изменения размера изображения следующим образом:

class Item < ApplicationRecord

    require "mini_magick"

    mount_uploader :filename, ImageUploader

    def resize_to_dev
        output_file_name = "public/uploads/item/filename/" + "#{self.id}" + "/" + "#{self.id}" + ".jpg"
        image = MiniMagick::Image.open(self.filename.current_path)
        image.resize "100x100"
        image.format "jpg"
        image.write output_file_name
    end

end

Это изменяет размер изображения и переименовывает его в itemid.jpg. Но если я пытаюсь отобразить его, используя этот код в моем шаблоне шоу.

<p><% @item.resize_to_dev  %>
<p><% output_file_dir = "public/uploads/item/filename/" + "#{@item.id}" + "/" + "#{@item.id}" + ".jpg"%>
<p><%= image_tag(output_file_dir, alt: 'Image')%>

Я получаю ошибку;

'Актив' public / uploads / item / filename / 2 / 2.jpg "отсутствует в конвейере ресурсов. '

, даже если файл находится в этом месте.

Для этого должен быть более простой способ! Любая помощь очень ценится.

1 Ответ

0 голосов
/ 02 февраля 2020

Я думаю, вам не нужно делать это преобразование в вашей модели или представлении.

Вы можете изменить ImageUploader следующим образом:

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{model.id}"
  end

  version :thumb do
    process resize_to_fit: [100, 100]
  end

  # some_other_code
end

А затем просто вызвать большой палец версия на ваш взгляд, как это:

<%= image_tag @item.filename.thumb.url, alt: 'Image' %>
...