2016-02-16 23 views
2

我結束了奇怪的錯誤(功能):多餘的空間詭計呈現多字符串中的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:我之前提到它,但我有同樣的問題,而使用的f.text_area的form_for塊。它看起來像:

.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用於編輯文章文本。然後它(文本)將在出現在html頁面之前使用降價處理器(RDiscount)進行處理。我沒有任何想法,爲什麼我應該使用simple_format在textarea中顯示原始文本,並且爲什麼在保存後這個 enter image description here應該變成這個 enter image description here

+0

爲什麼不使用html'br'? ' '? –

+0

@ЗелёныйBecouse acctually我用f.text_area幫手,它產生同樣的問題 – atomAltera

回答

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

\n是新的生產線,你在以前的行\r,將採取下一行的相同位置回車意味着移動到行首。

但我不會推薦這種方法,你應該使用<br/>標籤代替

所以使用

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

這將替換所有新行字符<br>標籤

一個更簡單的解決方案是使用simple_format ie:

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

UPDATE

下面是使用表單助手

.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') 
+0

其實同時使用f.text_area助手裏面的form_for助手同樣的問題發生,這是一個一般問題 – atomAltera

+0

是的它是一樣的,你可以在f.text_area中使用上述任何一種技術,如 f.text_area:description,:value => simple_format(YOUR_TEXT_HEAR) –

+0

不,它的工作原理應該如何:)但是現在,在
標記之前會出現空格apears,請參閱UDP2 – atomAltera

1

我只是遇到相同問題的代碼。這一切都歸結爲模板和佈局中的空白。在我的情況,我的主要應用是使用HAML,設有帶部分的application.html.haml像這樣

#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' 

這之前主要內容的「產量」是至少10位。

然後,我使用ERB中的寶石視圖,而不是HAML。但是,因爲我的主要應用程序佈局是HAML,所以視圖渲染/處理通過HAML渲染器。 HAML已經處理了空白和texareas,但是當最終的和完整的視圖被渲染時,來自主佈局的所有額外的空白被包括在html中並且導致textarea的內容被縮進。

爲什麼第一行不縮進?因爲HAML「preserve」函數會清除文本區域中第一行的空白。見https://github.com/haml/haml/issues/516

對我來說,簡單的解決方法是將HAML配置爲使用「醜陋」模式。這在渲染視圖時擺脫了所有主要的空白。 HAML FAQ中有更多關於textareas的「醜陋」模式和換行符。要配置HAML使用醜陋模式:

爲了提高性能,Haml的默認{Haml的選項::#醜陋的「醜」模式}在Rails的生產應用中投放。醜陋的模式是當空白被剝離時,這會偶爾導致問題。

如果您使用的是Rails,您可以通過創建一個config/initializers/haml.rb文件並在以下行中添加來更改默認行爲。

Haml::Template.options[:ugly] = true

鏈接,我發現有幫助,同時研究這個:

我的版本的Rails 4.2.6和4.0.7 HAML

4

在HAML,使用

~ f.text_area :text 

代替

= f.text_area :text 

~運算符抑制HAML中的「漂亮」換行符,這對w ith TEXTAREA和PRE標籤。有關更多信息,請參閱Whitespace preservation in HAML