Slim模板中\n无法实现换行的问题求助
解决Slim模板邮件中换行无效的问题
问题原因
Rails Action Mailer默认发送HTML格式邮件,在HTML渲染规则里,文本中的换行符\n会被解析为空格而非实际换行;同时Slim模板用=输出内容时会自动转义HTML,直接输出\n无法触发换行效果。
解决方案
方案1:将换行符替换为HTML换行标签<br>
修改test.slim,把文本里的\n替换成HTML的<br>标签,同时确保不转义HTML内容:
== @summaries.map { |summary| summary.gsub("\n", "<br>") }.join("<br>")
或者使用raw方法强制不转义:
= raw @summaries.map { |summary| summary.gsub("\n", "<br>") }.join("<br>")
方案2:切换为纯文本格式邮件
如果不需要HTML格式的邮件,直接在邮件方法中指定content_type为text/plain,这样\n就能正常生效:
修改clients_mailer.rb:
class ClientsMailer < ApplicationMailer def test(summaries) @summaries = summaries mail( to: "test@test.com", subject: "test", content_type: "text/plain" ) end end
此时原Slim模板的写法无需修改,纯文本环境下\n会被解析为换行。
方案3:用Slim遍历逐行输出
通过拆分文本逐行输出,配合<br>实现换行,可读性更强:
- @summaries.each do |summary| - summary.split("\n").each do |line| = line br
内容的提问来源于stack exchange,提问作者HeppokoNeet
相关产品推荐
相关产品推荐

