多余的空格将在Rails 5中呈现多行字符串

时间:2016-02-16 09:18:51

标签: ruby-on-rails ruby ruby-on-rails-5

我最终得到了奇怪的错误(功能?):

以下是 test.html.erb 文件的样子:

<textarea><%= "a\nb\nc" %></textarea>

并且在渲染的textarea中我期待类似的东西:

a
b
c

但我得到了:

enter image description here enter image description here

这些多余的空间来自哪里?

Rails 5.0.0.beta2

UDP:我之前应该提一下,但在 form_for 块中使用 f.text_area 时遇到同样的问题。它看起来像:

.form
  =form_for article do |f|
    .form-group
      =field_label f, :text, true
      =f.text_area :text, class: %w(form-control), rows: 20, placeholder: t('placeholder.article_text')

(HAML)

我最终得到它,并将漏洞利用简单的 erb 文件简化为一个字符串

UDP2: 以下是 simple_format <textarea><%= simple_format("a\nb\nc") %></textarea>

的外观

enter image description here

我应该澄清一些事情:这个textarea用于编辑文章文本。然后它(文本)将使用markdown处理器(RDiscount)处理,然后才会出现在html页面中。我不知道,为什么我应该使用simple_format在textarea中显示原始文本以及为什么这样 enter image description here应该成为这个 enter image description here 保存后?

3 个答案:

答案 0 :(得分:4)

在HAML中,使用

~ f.text_area :text 

而不是

= f.text_area :text

~运算符会抑制HAML中的“漂亮”换行符,这对TEXTAREA和PRE标记很有用。有关详细信息,请参阅Whitespace preservation in HAML

答案 1 :(得分:1)

<textarea><%= "a\r\nb\r\nc" %></textarea>

\n是新行,它将在前一行\r中的同一位置的下一行是回车均值移至行首。

但我不推荐这种方法你应该使用<br/>标签

所以使用

 <textarea><%= WhatEverTheTextIs.gsub(/\n/, '<br/>').html_safe %></textarea>

这会将所有换行符替换为<br>标记

另一个简单的解决方案是使用simple_format i-e:

 <textarea><%= simple_format(YOUR_TEXT_HERE) %></textarea>

<强>更新

以下是用于表单助手的代码

.form
  =form_for article do |f|
    .form-group
      =field_label f, :text, true
      =f.text_area :text,:value=>simple_format(article.text), class: %w(form-control), rows: 20, placeholder: t('placeholder.article_text')

答案 2 :(得分:1)

我刚遇到了同样的问题。这一切都归结为模板和布局中的空白。在我的情况下,我的主要应用程序是使用HAML并且有一个application.html.haml,其中包含类似的部分

div

在主要内容的“收益率”之前至少有10个空格。

然后我使用的是来自ERB中的宝石的视图,而不是HAML。但是,由于我的主应用程序布局是HAML,因此视图呈现/处理将通过HAML渲染器进行。 HAML已经处理了空白和texareas,但是当渲染最终和完整视图时,主布局中的所有额外空格都包含在html中,并导致textarea的内容缩进。

为什么第一行没有缩进?因为HAML“保留”功能会清除文本区域中第一行的空白。请参阅https://github.com/haml/haml/issues/516

对我来说,简单的解决方法是将HAML配置为使用“丑陋”模式。在渲染视图时,这将删除所有前导空格。 HAML FAQ中有更多关于“丑陋”模式和textareas中的换行符。要将HAML配置为使用丑陋模式:

  

为了提高性能,Haml在生产中运行的Rails应用程序中默认为{Haml :: Options#ugly“丑陋”模式}。丑陋的模式是当空白被剥离时,这可能偶尔会引起问题。

     

如果您使用的是Rails,则可以通过创建config / initializers / haml.rb文件并添加以下行来更改默认行为。

     

#content.container{tabindex: "-1"} .row - if content_for?(:left_nav) .col-md-3.sidebar = yield(:left_nav) .col-md-9 = flash_helper = yield %footer = render :partial => 'shared/footer'

链接我发现在研究这个问题时很有帮助:

我的版本是Rails 4.2.6和HAML 4.0.7