モデルにテキストのいくつかの段落を入力できるRailsアプリがありました。問題は、改行の入力方法がわからないことです。
"{ln} {/ ln}; {&nbsp} and {br} {/ br}"を追加しようとしましたが、htmlがテキストとして表示され、ブレークはありません。
とにかく、テキスト領域コントロールがモデルエントリ内に配置したhtmlのいずれかを使用するように設定できますか?
入力できるものはありますかRailsは認識します。ここに行を入れてください。
問題は、後でレンダリングするので、値を編集することではありません。テキストエリアで編集中に値に改行文字を追加するには、単にリターンキーを押します。後でその値を再編集しても、空白はまだ残っているはずです。
空白のレンダリングは注意が必要な部分です。 HTMLでは、空白は一般に重要ではありません。ブラウザが使用するようなレンダラーは、空白の連続文字列に対して単一のスペースを表示します。そのため、単に値をページにダンプするだけでは十分ではありません。
<%= obj.description %>
値が"One \t \n \n Two"
であっても、画面には"One Two"
として表示されます。
これらの改行文字を表示するときに実際に行を分離するには、レンダリングする前にそれらをHTMLに変換する必要があります。
<%= obj.description.gsub(/\n/, '<br/>') %>
もちろん、ユーザーがHTMLに含まれるデータを入力している場合、値をエスケープして [〜#〜] xss [〜#〜] から保護する必要があります。サポートする必要があるのが新しい行だけである場合は、次のように簡単にする必要があります。
<%= h(obj.description).gsub(/\n/, '<br/>') %>
より複雑な書式設定を許可する場合は、 Markdown および Textile (両方ともRailsがヘルパービューメソッドを提供します)を調べます。 XSS防止のために提供するサポートがある場合は、必ず調査してください。
テキストエリアの改行は「\ n」として生成されます。ただし、問題は、単にビューにダンプしただけでは、HTMLソースの改行に過ぎないことです。
Rails _simple_format
_ヘルパーを使用して、これの一部を処理してみてください: http://api.rubyonrails.org/classes/ActionView/Helpers /TextHelper.html#M002285
改行をHTMLタグに自動変換します。 <%= simple_format(my_text_field) %>
のようなもので使用できます。
ユーザー入力を変更せずに、これをcssに追加します。
white-space: pre-line;
ユーザー入力に\ rまたは\ n(入力)を新しい行として表示します。
残りのテキストをエスケープしながら、文字列で改行を表示する別の方法を次に示します。
<%= safe_join(@object.textarea_input.split("\r\n"), "<br />".html_safe) %>
こちらをご覧ください http://code.byteblues.com/2012/03/23/preloading-a-text-input-area-text_area-with-data-that-contains-a-line-break/ =
<%=raw text_area_tag :keywords, keywords, :rows => 8 %>
Railsのどのバージョンを使用していますか??これを処理する方法は、Rails 2と3で異なります。
レコードの値が"foo<br />bar"
だとしましょう
Rails 3で、HTMLを評価したい場合は<%=raw "foo<br />bar" %>
を実行できます。そうすると、ビューが表示されたときに改行が表示されます。
Rails 2では、それをする必要はありません、ただ<%= "foo<br />bar" %>
また、HTMLはとにかくtextareaで評価されません。
simple_format
の問題は、<b><i><hr><h1>
...などの他のタグも追加していることです。
他のタグなしで改行する場合は、パーシャルを作成することをお勧めします(line_breakと呼びます):
<% text.split("\n").each do |t| %>
<%= t %><br>
<% end %>
次に、ビューからそれを呼び出すだけです:
<%= render partial: 'line_break', locals: {text: some_text} %>
他の答えは間違っています。テキスト領域はレンダリングされません
TEXTAREA要素のinnerHTML値はHTMLをレンダリングしないため、改行として。
改行HTMLエンティティを追加する必要があります:
例:
<textarea><%= "LINE 1 LINE 2 LINE 3".html_safe %></textarea>
テキスト領域の改行-スタックオーバーフロー も参照してください。
\n
メモリが機能する場合(今日はあまりうまくいっていません...自己責任で試してみてくださいlol)
編集:textarea
について話していると仮定して、単純な出力であれば、<br>
上記の答えは良かった:
gsub
(@Ian)はうまく機能しましたsimple_format
(@Karl)は@Aaronが指摘したように、すべてを<p>
そこで、次のように微調整しました。
simple_format(value, {}, wrapper_tag: 'div')