0

データベースに、次のような文字列を含む列があります。

"Warning set for 7 days.\nCritical Notice - Last Time Machine backup was 118 days ago at 2012-11-16 20:40:52\nLast Time Machine Destination was FreeAgent GoFlex Drive\n\nDefined Destinations:\nDestination Name: FreeAgent GoFlex Drive\nBackup Path: Not Specified\nLatest Backup: 2012-11-17"

このデータを電子メールでユーザーに表示しています。次の操作を行うことで、HTML 電子メールのフィールドを簡単に完全にフォーマットすることができました。

simple_format(@servicedata.service_exit_details.gsub('\n', '<br>'))

上記のコードは"\n""<br>"タグに置き換え、simple_format が残りを処理します。

私の問題は、プレーンテキストテンプレートで適切にフォーマットする方法で発生します。最初は、列を呼び出すだけでよいと思っていました"\n"が、プレーンテキストが解釈され、すべてがうまくいくと想定していたためです。ただし、これは、必要に応じて改行を作成するのではなく、上に表示されているようにそのまま「\ n」の文字列を吐き出すだけです。

改行が認識されるように文字列を解析する方法を見つけようとしています。私が試してみました:

    @servicedata.service_exit_details.gsub('\n', '"\r\n"')
    @servicedata.service_exit_details.gsub('\n', '\r\n')
    raw @servicedata.service_exit_details
    markdown(@servicedata.service_exit_details, autolinks: false) # with all the necessary markdown setup
    simple_format(@servicedata.service_exit_details.html_safe)

どれもうまくいきませんでした。

誰が私が間違っているのか、またはどうすればこれを機能させることができるのか教えてもらえますか?

私が望むのは、プレーンテキストが改行を認識し、次のように文字列をフォーマットすることです:

Warning set for 7 days.
Critical Notice - Last Time Machine backup was 118 days ago at 2012-11-16 20:40:52
Last Time Machine Destination was FreeAgent GoFlex Drive

Defined Destinations:
Destination Name: FreeAgent GoFlex Drive
Backup Path: Not Specified\nLatest Backup: 2012-11-17"
4

1 に答える 1

1

分かりました。

リテラルのバックスラッシュとそれに続くn2 文字のシーケンスとしての文字と、通常\n.

また、Ruby で使用している 2 種類の引用符 (single と double) を区別する必要があります。単一引用符はリテラルです。単一引用符で特別に解釈されるのは、\'単一引用符をエスケープする sequence と\\、単一のバックスラッシュを生成する sequence だけです。したがって、'\n'はバックスラッシュと文字の 2 文字の文字列ですn

二重引用符は、あらゆる種類の奇妙なことを可能にします: で補間を使用でき#{}、エスケープ シーケンスによって特殊文字を挿入できます: "\n"LF 制御文字を含む文字列も同様です。

さて、あなたのデータベースには前者 (バックスラッシュとn) があるように見えますが、これは 2 つの証拠から示唆されてngsubます'\n'。あなたがする必要があるのは、役に立たないバックスラッシュと-nを実際の行区切り文字に置き換えることです。

@servicedata.service_exit_details.gsub('\n', "\r\n")
于 2013-03-30T01:11:08.613 に答える