Использование simple_format и html_safe одновременно в Rails
В @post.content
, Я хочу
1.simple_format, поэтому содержимое будет иметь разные строки, а не одну строку без разрывов
2.html_safe, чтобы пользователь мог вставить некоторые <embed>
ссылка на видео, как YouTube
Это нормально использовать <%= simple_format @post.content %>
а также <%= @post.content.html_safe %>
по отдельности
Но когда я использую их вместе: <%= simple_format @post.content.html_safe %>
, html_safe не работает, и, следовательно, <embed>
видео не отображается
Не могли бы вы сказать мне, как я могу включить <embed>
код и simple_format
в то же время? или есть другие решения для отображения @post.content
? Спасибо!!!
2 ответа
Я бы сказал simple_format
не дезинфицировать мой контент:
simple_format(@post.content, {}, :sanitize => false)
Я работаю над аналогичной проблемой.
Я пытаюсь опубликовать фрагменты кода в своем блоге. Это работает довольно хорошо, но все, что внутри <>, удаляется. Я показываю или что-то более сложное, что-то внутри <> исчезает. Я запустил код <% = simple_format (@ article.content), {}, sanitize: false и подошел к получению того, что хотел.
Проблема заключалась в том, что код внутри моих блоков фактически изменил макет моей страницы.:).
Я пошел с Redcarpet как мой ответ.
Это довольно просто.
Добавьте gem 'redcarpet' в ваш Gemfile и перезапустите сервер Rails.
В application_helper.rb вставьте следующий код:
def markdown(content)
@markdown ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, space_after_headers: true, fenced_code_blocks: true)
@markdown.render(content)
end
Опции здесь описаны в документации. Но именно fenced_code_blocks: true позволяет размещать код в блоках, как описано.
Это будет выводить здесь все, что вы печатаете, и это будет работать с вашей вставкой.
Затем для рендеринга в вашем случае просто введите:
уценки (@post.content).html_safe
Должно быть хорошо идти. У вас также есть возможность сделать отступ в четыре пробела, как здесь, чтобы вставить код. Кажется, легче сделать ограждение, хотя.