На мой взгляд, я могу отобразить свой файл, прикрепленный к модели с помощью Active Storage, во всплывающем окне, например:
<a href = "<%= rails_blob_path(@image.file, disposition: 'inline') %>" rel = "example_group"><%= image_tag @image.variant('small') %></a>
Работает хорошо.
Проблема в том, что я хочу использовать вариант в ссылке:
<a href = "<%= url_for(@image.variant('high')) %>" rel = "example_group"><%= image_tag @image.variant('small') %></a>
Используемый код варианта:
file.variant(resize:size).processed.service_url
Ссылка кажется хорошей, но когда я нажимаю на изображение, оно не открывается в моем всплывающем окне JS, как раньше, а открывается в новом окне браузера. Это очень странно.
Я сократил ссылку.
https://bucket.s3.eu-west-3.amazonaws.com/variants/MmsLY3rf8yR9/38a77a69d170464c472f6d36fb3fbc28b284af0cadaa533?response-content-disposition=inline%3B%20filename%3D%22chateau.jpeg%22%3B%20filename%2A%3DUTF-8%27%27chateau-lynch.jpeg&response-content-type=image%2Fjpeg&Signature=29fe7d85fe369ea2335fa8b333d4868d8c2f2c22e1efe
Это проблема "содержания-диспозиции"?





Ну вот что я сделал:
В моей модели изображения я добавил действие и использовал метод rails_presentation_url () из url_helpers:
include Rails.application.routes.url_helpers # это нужно для
include Rails.application.routes.url_helpers
def get_variant(version = "high", disposition = "attachment")
variant = file_variant(version)
return rails_representation_url(variant, only_path: true, disposition: disposition)
end
В моем html я могу вызвать свой метод с расположением вложений:
<a href = "<%= @image.get_variant('high', 'attachment') %>" rel = "example_group">
Я также могу загрузить вариант изображения прямо с моего контроллера:
def download
redirect_to @image.get_variant('high', 'attachment')
end
Если вы хотите отображать только вариант в окне браузера, вы можете использовать inline:
redirect_to @image.get_variant('high', 'inline')
Не уверен, что это лучший вариант, но он работает.