Определить тип файла и изменить размер изображения - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть вложение модели с PDF и изображениями.Как обнаружить его изображение и только потом изменить его размер?Когда это скрепка, все было просто.но сейчас ?;)

class Attachment < ActiveRecord::Base

        has_attached_file :attachment,
                styles:          lambda { |a| a.instance.is_image? ? {:small => "x200>", :medium => "x300>", :large => "x400>"}  : {:thumb => { :geometry => "100x100#", :format => 'jpg'}, :medium => { :geometry => "300x300#", :format => 'jpg'}}},

        def is_image?
                attachment.instance.attachment_content_type =~ %r(image)
        end

end

Как сделать что-то подобное выше с активной памятью?Я пытаюсь так:

class Attachment < ApplicationRecord
  has_one_attached :file
  validates :file, presence: true

def file_url
if ???? (is image?)
rails_blob_url(file.variant(resize: '1920x1920').processed)
else
rails_blob_url(file)
  end
end

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Я пробовал это и .. Что это "Sign_id"?


NoMethodError (undefined method `signed_id' for #<ActiveStorage::Variant:0x00007fb67a4325f0>):

activestorage (5.2.0) config/routes.rb:7:in `block (2 levels) in <main>'
actionpack (5.2.0) lib/action_dispatch/routing/route_set.rb:641:in `instance_exec'
actionpack (5.2.0) lib/action_dispatch/routing/route_set.rb:641:in `eval_block'
actionpack (5.2.0) lib/action_dispatch/routing/route_set.rb:630:in `call'
actionpack (5.2.0) lib/action_dispatch/routing/route_set.rb:164:in `block (2 levels) in add_url_helper'
app/models/attachment.rb:27:in `file_url'
app/serializers/api/v1/attachment_serializer.rb:7:in `file_url'
0 голосов
/ 12 апреля 2019

ActiveStorage имеет встроенные помощники для популярных типов контента, таких как: изображение, видео, аудио и т. Д. Для изображения image?:

if file.image?
  rails_representation_url(file.variant(resize: '1920x1920').processed)
else
  rails_blob_url(file)
end

Api docs: https://api.rubyonrails.org/classes/ActiveStorage/Blob.html#method-i-image-3F

audio?, image?, text?, video?

...