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;       else         char_count+=1       end     end     return text   end

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" end

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 cumbersome).


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 thing.

  def simple_format2(text)     text.gsub!(/(\r\n|\n|\r)/, "\n") # lets make them newlines crossplatform     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 />   end

Thanks again!