Невозможно связать изображение с HTML в приложении Rails

Я разрабатываю веб-приложение с использованием Ruby on Rails. У меня есть изображение, которое я хочу добавить на сайт, и я попытался использовать HTML-тег img src для вызова локального изображения, но это не сработает. Если я использую ruby, чтобы вызвать его с помощью метода «тег изображения», он работает нормально. Мне просто интересно, почему он никогда не работает с HTML.

Например, я добавляю изображение в app>assets>images>image1.png

В файле View я добавляю HMTL следующим образом:

 <img src = "/app/assets/images/image1.png">

он не загружается

Но если я введу этот код в том же месте:

<%= image-tag: "image1.png" %>

Это работает нормально.

Кто-нибудь знает, почему это происходит? Я знаю, что у меня есть обходной путь, но я бы предпочел знать, почему мой HTML-тег имеет проблему с локальными файлами, но при этом прекрасно связывается с файлами в Интернете. Я новичок в кодировании. Ваше здоровье!

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
1 207
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы можете попробовать с онлайн-примером? Я предполагаю, что ruby ​​​​не находит ваше изображение в каталоге.

<img src  = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Googleplex_HQ_%28cropped%29.jpg/250px-Googleplex_HQ_%28cropped%29.jpg"> </img>
Ответ принят как подходящий

Хороший вопрос. Компилятор ресурсов Rails важен, но создает некоторые проблемы, подобные этой.

Компилятор ресурсов, вероятно, добавляет отпечаток кеша к имени файла. Вы можете использовать <%=asset_path('images/image1.png')%> в качестве значения атрибута src или продолжать использовать image_tag.

См. документ ресурсов руководства Rails для получения дополнительной информации.

Это помогает?

Здравствуйте, спасибо за ответ. Я попробовал <img src = "<%=asset_path('images/image1.png')%>">, но выдало ошибку, что актив не найден. Затем я попробовал <img src = "<%= assets_path('/image1.png')%>"> Что не дало мне никаких ошибок, но изображение по-прежнему не загружается, оно просто отображается как неработающая ссылка. Когда я проверяю image_tag (который работает), он показывает HTML следующим образом: img src= "/assets/image1-48e6870c46f97f301cb1d7c6e8fdf2d04c03dc407bf5‌​f2199f27ad41f3f26137‌​.png Почему он добавляет всю эту другую информацию? Это.

Ghazarios 11.04.2019 08:21

Дополнительная информация — это отпечаток кеша, чтобы браузеры могли кэшировать ресурс и не перезагружать его из сети. При изменении файла отпечаток меняется. Затем браузеры должны загрузить измененный файл. Возможно, я должен был написать <%=asset_path('image1.png')%>

Douglas Lovell 11.04.2019 20:14

<%=asset_path('image1.png')%> отлично работает, спасибо!

Ghazarios 15.04.2019 08:31

Похоже, ваш синтаксис неверен для помощника image_tag. Попробуй это:

<%= image_tag "image1.png" %>

Дополнительная информация в документации по Rails

Да, я неправильно написал тег здесь, но я правильно написал его в своем приложении, тег изображения работает, а img-src не работает.

Ghazarios 11.04.2019 08:11

Проблема в пути, который вы используете. Вот короткая версия: удалите app/ из URL-адреса изображения, и оно должно работать как положено.

Если вы запустите приложение с работающим кодом, вы увидите, что это то, что image_tag уже делает для вас за кулисами, проверив HTML. Вы должны увидеть что-то вроде этого:

<img src = "/assets/images/image1.png">

Обновление тега img для использования этого пути должно решить проблему.

Тем не менее, вы должен используете image_tag, если это возможно! Не вдаваясь слишком глубоко в технические подробности, если вы развернете свой сайт в рабочей среде с версией image_tag и взглянете на HTML, вы, вероятно, увидите что-то вроде этого:

<img src = "/assets/images/image1-[sequence of characters].png">

Это поможет убедиться, что клиенты удаляют устаревшие активы из своих кешей по мере необходимости — технические подробности можно найти в здесь (см. раздел 1.2). Если вы жестко закодируете изображение, вы упустите все функции, предоставляемые конвейером ресурсов.

Я пытался исключить «приложение» из пути и просто ввести img src = "/assets/images/image1.png", но это тоже не сработало. Когда я проверяю image_tag (который работает), он показывает HTML следующим образом: img src= "/assets/image1-48e6870c46f97f301cb1d7c6e8fdf2d04c03dc407bf5‌​f2199f27ad41f3f26137‌​.png Почему он добавляет всю эту другую информацию? Спасибо за информацию об использовании image_tag вместо этого!

Ghazarios 11.04.2019 08:26

Это описано в документации, на которую я дал ссылку — это отпечаток пальца, который генерируется image_tag. Если вы сделаете какие-либо обновления для этого изображения (или полностью замените его), эта строка изменится — это означает, что любые браузеры, которые уже кэшировали исходное изображение, будут вынуждены запросить новое.

Sculper 11.04.2019 15:47

Если вы хотите использовать тег изображение, вам следует:

<img src = "<%= asset_path('image1.png') %>"/>

Без "/images" и "/".

Другие вопросы по теме