Файлы из ActiveStorage не отображаются с ошибкой "Отсутствует шаблон"
Rails v5.2.1; Файлы загружаются в приватную корзину AWS с помощью DirectUpload
Но я не думаю, что это моя проблема.
У меня есть модель пользователя, которая содержит has_one_attached :avatar
, Изображение загружено без проблем; Я вижу это в моем ведре и в таблицах ActiveStorage в моей БД.
Позже я пытаюсь отобразить загруженный аватар так:
<%= image_tag url_for(current_user.avatar) %>
(I've also tried this):
<img src="<%= url_for(current_user.avatar) -%>" />
Это генерирует URL, что-то вроде http://localhost:3000/rails/active_storage/blobs/[a hash, I assume]/[my file name].png
Однако... изображение не отображается. Если я пытаюсь открыть изображение в новой вкладке, я получаю страницу ошибки "Шаблон отсутствует".
Missing template /application with {:locale=>[:en], :formats=>[:png], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}. Searched in: * "/Users/matt/projects/project/app/views" * "/Users/matt/.rvm/gems/ruby-2.5.1/gems/kaminari-core-1.1.1/app/views" * "/Users/matt/.rvm/gems/ruby-2.5.1/gems/devise-4.4.3/app/views"
Extracted source:
def index
render template: 'application'
end
Теперь... у меня определенно есть application.html
шаблон, но это, кажется, ищет application.png
шаблон, который не кажется правильным. Что мне не хватает?
1 ответ
Решение
Посмотреть
<%= image_tag url_for(current_user.avatar_url) %>
Модель пользователя
#user.rb
class User < ApplicationRecord
#...
def avatar_url
if self.avatar.attached?
Rails.application.routes.url_helpers.rails_blob_path(self.avatar, only_path: true)
#or
self.avatar.service_url
else
nil
end
end
end