我的数据库中有一个包含如下字符串的列:
"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"
答案 0 :(得分:1)
我明白了。
您需要区分文字反斜杠后跟字母n
作为两个字符的序列,以及一个LF字符(a.k.a。换行符),通常表示为\n
。
你还需要区分你在Ruby中使用的两种不同的引用:单打和双打。单引号是文字的:唯一用单引号解释的是序列\'
,以逃避单引号,以及序列\\
,它产生一个反斜杠。因此,'\n'
是反斜杠和字母n
的双字符字符串。
双引号允许包含各种奇怪的东西:你可以使用#{}
插值,你可以通过转义序列插入特殊字符:所以"\n"
是一个包含LF控制字符的字符串
现在,在您的数据库中,您似乎拥有前者(反斜杠和n
),正如两个证据所示:您在打印时看到字面反斜杠和n
这一事实它,以及gsub
找到'\n'
的事实。你需要做的是用实际的行分隔符字符替换无用的反斜杠 - 和 - n
。
@servicedata.service_exit_details.gsub('\n', "\r\n")