Image_tag не возвращает изображение, используя URL-адрес в сервисе

module FileService
  class LetterGenerator
    def initialize(user)
      @user = user
    end

    def process
      WickedPdf.new.pdf_from_string(
        ApplicationController.new.render_to_string(
          template: 'services/main.pdf.erb',
          locals: { user: user}
        )
        margin: { top: 10, bottom: 20 }
      )
    end

    private

    attr_reader :user
  end
end

main.pdf.erb

<meta http-equiv = "content-type" content = "text/html; charset=utf-8" />
<div class = "letter">
  <div class='header'>
    <div class='header-right'>
      <b>Letter</b>
    </div>
    <div class='logo'>
      <% if @user.client %>
        <%= image_tag Setting.take.logo.url, size: "100x50" %>
      <% else %>
        <%= image_tag wicked_pdf_asset_base64('mailer/logo.png') %>
      <% end %>
    </div>
  </div>
</div>

Изображение присутствует в таблице настроек, но не отображается в файле pdf.erb. Я думаю, что эта проблема заключается в том, как использовать image_tag для отображения изображения в сервисе. Не уверен на 100%. Пожалуйста, помогите мне решить эту проблему

Настройка.take.logo.url

/uploads/setting/logo/1/America_1.png

Здесь просто выстрел в темноте, но, вероятно, это как-то связано с тем фактом, что src «url» является относительным путем, а не полным URL-адресом.

engineersmnky 30.05.2024 22:32

@engineersmnky, это не так, потому что я использую Setting.take.logo.url, как в файле mailer/send_user.html.erb, и там он работает нормально. Это как-то связано с тем, как evilpdf используется в сервисе.

user12763413 30.05.2024 22:35

@engineersmnky это изображение отображается <%= image_tag evil_pdf_asset_base64('mailer/logo.png') %>, когда пользователь не является клиентом

user12763413 30.05.2024 22:48

Согласно документации вам может понадобиться использовать wicked_pdf_image_tag, потому что, как я уже упоминал, для этого требуется абсолютная ссылка (настоящий URL-адрес).

engineersmnky 31.05.2024 01:00

@engineersmnky это местоположение файла, где он хранится на моем локальном компьютере. Код, который я пытаюсь использовать выше, находится на моем локальном компьютере. /Users/xyz/Documents/project/onboarding_app/public/uploads/s‌​etting/logo/1/Americ‌​a_1.png

user12763413 31.05.2024 16:25

@engineersmnky Да, я пробовал <%= image_tag evil_pdf_asset_base64(Setting.take.logo.url), size: "100x50" %> возвращает ошибку. Не удалось найти актив 'uploads/setting/logo/1/America_1.png'

user12763413 31.05.2024 16:48

@engineersmnky даже попробовал <%= evil_pdf_image_tag Setting.take.logo.url %> все равно не получилось, изображение не отображается в сгенерированном PDF-файле

user12763413 31.05.2024 17:07

Хорошо, последняя попытка, которую я могу вспомнить. Пожалуйста, попробуйте asset_url(Setting.take.logo.url, skip_pipeline: true), возможно, вам также придется передать опцию host, если config.action_controller.asset_host не установлен или установлен неправильно. например host: 'http://mywebsite.com'

engineersmnky 31.05.2024 18:45

<img src = "<%= Settings.default.host + Setting.take.logo.url %>"> У меня это сработало

user12763413 31.05.2024 20:17

@engineersmnky, вы можете опубликовать ответ, и я поставлю галочку. Спасибо за все что ты сделал для меня

user12763413 31.05.2024 20:19

Ты решил это для себя, все, что я делал, это говорил об этом. Не стесняйтесь опубликовать свой ответ. Я даже проголосую за это. Хотя URI.join(Setting.default.host,Setting.take.logo.url) было бы более идиоматично, и если вам это нужно чаще, я бы предложил сделать это методом Settings, например. def full_url(asset_path)= URI.join(Setting.default.host,asset_path)

engineersmnky 31.05.2024 21:11

Для локально хранящихся ресурсов вы можете использовать путь к файлу вместо URL-адреса. Это должен быть абсолютный путь, а не относительный.

max 04.06.2024 15:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
12
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

<img src = "<%= Settings.default.host + Setting.take.logo.url %>">

Это сработало для меня

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