换行符不在视图中显示

时间:2011-02-27 05:10:09

标签: ruby-on-rails ruby-on-rails-3

我的Person.description存储在数据库中:

  

jnkl

     

fdsfdsf

     

fdsf

     

fsdfdsfs fds fd sf sdf ds

如何在视图中使用换行符显示?它目前显示在一条线上,我不明白为什么。

5 个答案:

答案 0 :(得分:26)

原因在于,在纯HTML中,除了包含'xmp'之类的标记之外,换行符不会呈现为换行符,因为大多数情况下它们都会被忽略。要让它们显示出来,您需要使用'br'标签或其他具有与之关联的样式或结构的内容替换它们,例如p标签,甚至是div,具体取决于内容。

这应该按照你的要求行事:

@person.description.gsub(/\n/, '<br />')

内置的Rails帮助程序simple_format也可以使用p标记

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

答案 1 :(得分:24)

你应该使用simple_format帮助器:

<%= simple_format @person.description %>

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

来源

# File actionview/lib/action_view/helpers/text_helper.rb, line 301
def simple_format(text, html_options = {}, options = {})
  wrapper_tag = options.fetch(:wrapper_tag, :p)

  text = sanitize(text) if options.fetch(:sanitize, true)
  paragraphs = split_paragraphs(text)

  if paragraphs.empty?
    content_tag(wrapper_tag, nil, html_options)
  else
    paragraphs.map! { |paragraph|
      content_tag(wrapper_tag, raw(paragraph), html_options)
    }.join("\n\n").html_safe
  end
end

答案 2 :(得分:4)

我也用

@person.description.gsub(/\n/, '<br/>').html_safe 

在视图中显示它们

答案 3 :(得分:1)

不是将\ n替换为<br>标记,而是使用css white-space: pre在\ n上换行。

来源:An html tag other than a textarea where \n is correctly interpreted

答案 4 :(得分:0)

simple_format 不适合我的需要,因为我希望能够显示多个换行符。 simple_format 使一个段落有 2 个或更多换行符。 所以,我改用了 css white-space: break-spaces;。目前唯一的缺点是浏览器支持率现在是 89.5%。