Multi line text


I am storing multi-lined information in a text field in the database,
and intaking it using a text_area field. When i output it, the
information is all streamed into one line. How can I output the
information with the line breaks.


Replace ‘\n’ with ‘
’ (or ‘
\n’) in your string when rendering it.


I define the following method in one of my helper files:

  # wraps each line to width characters, splitting lines on a
whitespace character
  def wrap_text(text, width = nil)
    char_count = 0
    0.upto(text.length) do |i|
      point = i;
      # reset the character counter if we encounter a newline
      # before we've reached width characters
      char_count = 0 if text[point..point] == "\n";
      if char_count > width
        # once we hit the desired width of characters, start
        # moving backwards one character at a time until we
        # encounter a whitespace character
        point -=1 while text[point..point] != " "
        text.insert(point+1, "\n")
        # we've inserted a newline, reset the character counter
        char_count = 0;
    return text

I'm sure there's an easier method for line wrapping (if anyone else
has a better method, I'd love to see it). I did come across the
following site earlier today, which includes a _much_ simpler method
for line wrapping, although unfortunately it doesn't work:

the method is the following:

str = "Hello. Ruby rocks. " * 50
while space_pos = str.rindex(" ", 80)
  str[space_pos, 1] = "\n"

but it fails to correctly line wrap, since each call to str.rindex
doesn't take into account where the previous newline character was
inserted.. I just didn't want to spend any time fixing it, since I've
already got a working line wrap method (albeit mine is a bit


Thanks Curtis, that's good to know.. Although I think I'll stick to my
current method, as this one seems to remove lines with nothing but a
line feed on them, which I often have, since I'm displaying the
contents of user entered text in a <pre></pre> tag. With my method, I
get pretty much exactly what the user has entered, including their
empty linefeeds, but wrapped so that it doesn't extend past the width
of the page.


Thanks for all the help! I ended up using the simple_format helper as a
base, but modified it so that it didn't put <p> tags around the entire

  def simple_format2(text)
    text.gsub!(/(\r\n|\n|\r)/, "\n") # lets make them newlines
    text.gsub!(/\n\n+/, "\n\n") # zap dupes
    text.gsub!(/\n\n/, '</p>\0<p>') # turn two newlines into paragraph
    text.gsub!(/([^\n])(\n)([^\n])/, '\1\2<br />\3') # turn single
newline into <br />

Thanks again!