ActiveStorage - Получить вариант URL в модели - PullRequest
0 голосов
/ 10 января 2019

Я нахожусь в процессе миграции моего приложения Rails с использования PaperClip на ActiveStorage.

В одной из моих моделей у меня был следующий метод (с использованием скрепки):

class ECard < ActiveRecord
    def thumb_url
        self.attachment.url(:thumb)
    end
end

А в контроллере у меня есть:

def by_type
    @e_cards = ECard.where(type_id: params[:type_id]).as_json(:only => [:id, :name], :methods => [:thumb_url])
    respond_to do |format|
        format.json { render json: @e_cards }
    end   
end

Теперь, когда я использую ActiveStorage, как получить URL-адрес миниатюры вложения из метода thumb_url?

Работы : Rails.application.routes.url_helpers.rails_blob_path(attachment, only_path: true)

Не работает : Rails.application.routes.url_helpers.rails_blob_path(attachment.variant(resize: '200x200'), only_path: true) Выдает ошибку: NoMethodError (undefined method 'signed_id' for #<ActiveStorage::Variant:0x00007fac1960eab0>)

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

attachment.variant (resize: "200x200"). У меня работает service.url. Он дает вам внешний URL при работе с S3, а не внутреннюю ссылку для вашего приложения.

0 голосов
/ 10 января 2019

Нашли!

def thumb_url 
    Rails.application.routes.url_helpers.rails_representation_url(attachment.variant(resize: "200x200").processed, only_path: true)
end

Найдено от этот ответ .

...