入力したテキストの改行をviewに反映する方法
このように、テキストの改行が反映されるようになります。
simple_formatメソッドを使う
このメソッドは与えられた文字列に対して
文字列を<p>で括る
改行は<br/>を付ける
連続した改行は</p><p>に変換
という処理を行います。
ただ、HTMLタグなどをサニタイズする働きもあるようです。
def simple_format(text, html_options = {}, options = {}) wrapper_tag = options.fetch(:wrapper_tag, :p) text = sanitize(text) if options.fetch(:sanitize, true) paragraphs = split_paragraphs(text) if paragraphs.empty? content_tag(wrapper_tag, nil, html_options) else paragraphs.map! { |paragraph| content_tag(wrapper_tag, raw(paragraph), html_options) }.join("\n\n").html_safe end end
ということは、前回の記事で行ったテキストへの処理が無効化されてしまいます。
(テキスト内のURLがaタグに変換されるようにする - naito-coding0322’s diary)
筆者の場合は、リンクをクリックしたときに別ページでリンク先を開いてほしいのに、
target="_blank"
が無効化されてしまい困っていました。
解決方法
オプションでsanitizeをfalseにすることができます!
<%= simple_format(文字列, {}, sanitize: false) %>
前回の記事に反映させると
<%= simple_format(convert_url_into_a_tag(h(@task.description)).html_safe, {}, sanitize: false) %>
これで、文中のURLをaタグに変換したテキストの改行を反映してviewで表示することができました。
もちろんですがsimple_formatのサニタイズをfalseにするのは、その前段階でテキストにhtml_escapeメソッドを使ってユーザーからの入力に対処していることが前提です。