Использование simple_format и html_safe в то же время в Rails

В @post.content я хочу

1.simple_format, поэтому контент будет иметь разные строки, а не одну строку без разрывов

2.html_safe, поэтому пользователь может вставить ссылку на <embed>, такую ​​как youtubes

В порядке использования <%= simple_format @post.content %> и <%= @post.content.html_safe %> отдельно

Но когда я использую их вместе: <%= simple_format @post.content.html_safe %>, html_safe не работает, и, следовательно, видео <embed> не отображается

Не могли бы вы рассказать мне, как я могу включить код <embed> и simple_format в одно и то же время? или есть другие решения для отображения @post.content? Спасибо!!!

Ответ 1

Я бы сказал simple_format не санировать мой контент:

simple_format(@post.content, {}, :sanitize => false)

Ответ 2

Я работаю над подобной проблемой.

Я пытаюсь опубликовать фрагменты кода в своем сообщении в блоге. Он работает очень хорошо, но что-то внутри " Я показываю или что-то более сложное что-либо внутри < > исчезает. Я запустил код <% = 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

Должно быть хорошо идти. У вас также есть возможность отступать четыре пробела, как здесь, чтобы вставить код. Кажется, легче сделать ограждение, хотя.