Исправление digest_custom_html для обработки как HTML (ранее: Переопределение digest.html.erb)

О боже! Оказывается . . . Я могу!!! Мне бы и в голову не пришло, что я могу разместить это там, а не в самом шаблоне, где (в моей голове, по крайней мере) оно рендерится.

Теперь я вижу и понимаю, что digest_custom вызывает .html_safe, как ни в чём не бывало, в коде, который я смотрел и пытался понять, но (для меня) сбивает с толку использование этого странного синтаксиса без скобок. (Или, возможно, я просто никогда бы его не заметил).

Что ж, я вижу значения в локалях, но по сравнению с перезаписью шаблона, как я делал раньше, это гораздо менее рискованное решение.

Огромное спасибо за то, что указали мне верный путь!

Вот ещё одна вещь, которую я делаю, и это кажется глупым. Моему digest_custom_html нужен пользователь, для которого он рендерится, поэтому я переопределяю digest, чтобы установить @user, чтобы мой digest_custom_html мог получить доступ к пользователю, для которого предназначен дайджест. Есть ли какой-то супер-простой способ избежать этого?

after_initialize do
  # Код, который должен выполняться после завершения загрузки Rails

  # require_relative "lib/discourse_add_jobs_to_digest/user_notifications_helper_override"
  require_relative "lib/discourse_add_jobs_to_digest/engine"
  require_relative "lib/discourse_add_jobs_to_digest/job_api"

  require_dependency "user_notifications"
  module ::UserNotificationsHelperOverride
    def digest_custom_html(position_key)
      if position_key == "above_footer"
        DiscourseAddJobsToDigest::JobApi.get_jobs_html(@user).html_safe
      else
        super
      end
    end
  end

  UserNotificationsHelper.prepend(::UserNotificationsHelperOverride)

  module ::UserNotificationsOverride
    def digest(user, opts = {})
      @user = user
      super
    end
  end
  UserNotifications.prepend(::UserNotificationsOverride)
end