如何在rails视图中生成更改行字符(.html.erb文件)

时间:2011-03-16 16:15:39

标签: ruby-on-rails

我试过了:

<%= "foo \n bar" %> 

只得到“Foo bar”。 Rails似乎忽略了转义字符。如何从数据库输入并且“\ n”是表示更改行的记录的一部分,我如何生成更改行字符。 (我是否必须在控制器中用乐队编写一个文本解析器?我认为这种方式太麻烦了......)

3 个答案:

答案 0 :(得分:6)

尝试simple_format

<%= simple_format "foo \n bar" %>

答案 1 :(得分:0)

你可以简单地用html断行替换它们,因为&lt;%=%&gt;将输出为html。所以,

<%= "foo \n bar".gsub("\n","<br />") %>

答案 2 :(得分:0)

我检查了simple_html功能的代码。它实际上是一个gsub调用如下:

# File actionpack/lib/action_view/helpers/text_helper.rb, line 253
      def simple_format(text, html_options={}, options={})
        text = ''.html_safe if text.nil?
        start_tag = tag('p', html_options, true)
        text = sanitize(text) unless options[:sanitize] == false
        text.gsub!(/\r\n?/, "\n")                    # \r\n and \r -> \n
        text.gsub!(/\n\n+/, "</p>\n\n#{start_tag}")  # 2+ newline  -> paragraph
        text.gsub!(/([^\n]\n)(?=[^\n])/, '\1<br />') # 1 newline   -> br
        text.insert 0, start_tag
        text.html_safe.safe_concat("</p>")
      end

之前它无法正常工作的原因是我需要添加html_safe调用。我记得我以前见过这个。它仅用于轨道3。因此nkassis没有错。

实际上我可以按如下方式编写代码:

<%= "foo \n bar".gsub!(/([^\n]\n)(?=[^\n])/, '\1<br />').html_safe %>