Rails/Redcarpet: Markdown->HTML с атрибутами ссылки не работает в помощнике

У меня есть функция в моем ApplicationHelper, а также точный дубликат в контроллере для предварительной визуализации. Предварительный рендеринг создает ссылки так, как я хочу, с target="_blank", но рендеринг на месте - нет. Мой код выглядит следующим образом:

require 'redcarpet'

module ApplicationHelper
  def markdown(text)
    rndr = Redcarpet::Render::HTML.new(:link_attributes => Hash["target" => "_blank"])
    markdown = Redcarpet::Markdown.new(
                rndr,
                :autolink => true,
                :space_after_headers => true
              )
    return markdown.render(text).html_safe
  end
end

Запуск этого в консоли rails также отображает ссылки как обычно, без атрибутов ссылок. Идентичный код в моем контроллере работает как положено.

1 ответ

Я получил это, чтобы работать с помощью пользовательского генератора уценки (Redcarpet v 3.1.2)

lib/my_custom_markdown_class.rb
class MyCustomMarkdownClass < Redcarpet::Render::HTML
  def initialize(extensions = {})
    super extensions.merge(link_attributes: { target: "_blank" })
  end
end

затем используйте это так

app/helpers/application_helper.rb
def helper_method(text)
  filter_attributes = {
      no_links:    true,
      no_styles:   true,
      no_images:   true,
      filter_html: true
    }

  markdown = Redcarpet::Markdown.new(MyCustomMarkdownClass, filter_attributes)
  markdown.render(text).html_safe
end

Кроме того, вы можете поместить этот helper_method в вашу модель и установить filter_attributes как переменную класса.

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