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

Ruby on rails 如何在rails视图(.html.erb文件)中生成更改行字符,ruby-on-rails,Ruby On Rails,我试过: <%= "foo \n bar" %> 只有“foobar”。Rails似乎忽略了转义字符。如何生成变更行字符,因为我从数据库获得输入,“\n”是表示变更行的记录的一部分。(我必须在控制器中按波段编写文本解析器吗?我认为这种方法太麻烦了…试试看 您可以简单地用html换行符替换它们,因为它只会将输出作为html。所以 <%= "foo \n bar".gsub("\n","<br />") %> 我检查了功能代码。它实际上是一个gsub调

我试过:

<%= "foo \n bar" %> 

只有“foobar”。Rails似乎忽略了转义字符。如何生成变更行字符,因为我从数据库获得输入,“\n”是表示变更行的记录的一部分。(我必须在控制器中按波段编写文本解析器吗?我认为这种方法太麻烦了…

试试看


您可以简单地用html换行符替换它们,因为它只会将输出作为html。所以

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

我检查了功能代码。它实际上是一个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
<%= "foo \n bar".gsub!(/([^\n]\n)(?=[^\n])/, '\1<br />').html_safe %>
#文件actionpack/lib/action_view/helpers/text_helper.rb,第253行
def简单_格式(文本,html_选项={},选项={})
text=''.html\u如果text.nil是否安全?
start\u tag=tag('p',html\u选项,true)
text=清除(text),除非选项[:清除]==false
text.gsub!(/\r\n?/,“\n”)#\r\n和\r->\n
text.gsub!(/\n\n+/,“

\n\n{start#u tag}”)#2+换行符->段落 text.gsub!(/([^\n]\n)(?=[^\n])/,“\1
”)#1换行符->br text.insert 0,开始标记 text.html\u safe.safe\u concat(

) 终止
以前它不工作的原因是我需要添加html_安全调用。我记得我以前见过这个。它仅适用于rails 3。因此恩卡西斯没有错

事实上,我可以编写如下代码:

# 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
<%= "foo \n bar".gsub!(/([^\n]\n)(?=[^\n])/, '\1<br />').html_safe %>

simple_格式实际上是call
gsub
,并用
p
标签包装双倍行距的段落。