For outputting a given String in HTML, you mostly want to replace line breaks with <br>
or <p>
tags.
You can use simple_format
, but it has side effects like keeping some HTML.
If you only care about line breaks, you might be better off using a small, specialized helper method:
def format_linebreaks(text)
safe_text = h(text)
paragraphs = split_paragraphs(safe_text).map(&:html_safe)
html = ''.html_safe
paragraphs.each do |paragraph|
html << content_tag(:p, paragraph)
end
html
end
Full disclosure: Under the hood this uses the private Rails helper method split_paragraphs
that simple_format
uses.
While it might break when upgrading Rails, you at least don't need to re-implement that part.
- Note that calling
map(&:html_safe)
is okay because we escaped the input, and because splitting it won't turn the escaped input unsafe. - Note that
simple_format
has the niceness to replace"
with"
for you
Alternative
You can also use the CSS property
white-space: pre-wrap
Show archive.org snapshot
.
Posted by Arne Hartherz to makandra dev (2018-04-19 13:28)