Read more

When you want to format only line breaks, you probably do not want simple_format

Arne Hartherz
April 19, 2018Software engineer at makandra GmbH

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.

Illustration online protection

Rails Long Term Support

Rails LTS provides security patches for old versions of Ruby on Rails (2.3, 3.2, 4.2 and 5.2)

  • Prevents you from data breaches and liability risks
  • Upgrade at your own pace
  • Works with modern Rubies
Read more Show snapshot

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)

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 &quot; with " for you


You can also use the CSS property white-space: pre-wrap Show snapshot .

Posted by Arne Hartherz to makandra dev (2018-04-19 15:28)