Ruby on Rails中如何修改MailForm生成邮件的属性输出格式?
解决方案
你使用的是mail_form gem,要调整邮件展示格式可以通过两种方案实现,以下是具体修改步骤:
方案一:直接修改模型配置(简单快速)
直接修改contact.rb文件,关闭默认属性自动输出,自定义邮件正文内容,同时修正原有headers参数的错误:
class Contact < MailForm::Base # 给所有属性添加show_in_email: false,禁止默认自动输出到邮件 attribute :Guest_One_First_Name, show_in_email: false attribute :Guest_One_Surname, show_in_email: false attribute :Guest_Two_First_Name, show_in_email: false attribute :Guest_Two_Surname, show_in_email: false attribute :Children, show_in_email: false attribute :Restrictions, show_in_email: false attribute :Attending, show_in_email: false # 自定义邮件正文 def body content = [] content << "嘉宾1:#{Guest_One_First_Name} #{Guest_One_Surname}" # 如果嘉宾2是可选字段,可添加判断,有值才展示 content << "嘉宾2:#{Guest_Two_First_Name} #{Guest_Two_Surname}" if Guest_Two_First_Name.present? # 过滤Attending的空值后用逗号拼接 content << "Attending: #{Attending.reject(&:blank?).join(', ')}" # 如果需要保留儿童数量、饮食限制信息,可取消下面两行的注释 # content << "儿童数量:#{Children}" # content << "饮食限制:#{Restrictions.presence || '无'}" content.join("\n") end def headers { subject: "RSVP", to: 'mariagenourcolas@gmail.com', # from需要替换为你实际配置的发件人邮箱,否则会发送失败 from: %("#{Guest_One_First_Name} #{Guest_One_Surname}" <你的发件人邮箱@你的域名.com>), # 如果你表单收集了用户邮箱,可在此处配置reply_to为用户邮箱,否则可删除该参数 # reply_to: 用户填写的邮箱 } end end
方案二:自定义邮件视图(适合后续频繁调整格式)
如果后续需要灵活修改邮件样式、添加更多内容,推荐用自定义视图的方式:
- 在项目
app/views目录下新建mail_form文件夹 - 在文件夹内新建
contact.text.erb(纯文本邮件)或者contact.html.erb(HTML格式邮件) - 在模板内直接编写你需要的展示格式,示例如下:
嘉宾1:<%= @resource.Guest_One_First_Name %> <%= @resource.Guest_One_Surname %> 嘉宾2:<%= @resource.Guest_Two_First_Name %> <%= @resource.Guest_Two_Surname %> Attending: <%= @resource.Attending.reject(&:blank?).join(', ') %>
该方案不需要修改模型的属性配置,后续调整格式只需要修改视图文件即可。
可选优化:修复Attending空值问题
你当前收到的Attending数组里有空字符串,是因为Rails的collection_check_boxes默认会生成隐藏的空值input,你可以修改前端erb代码关闭该功能,减少后端处理压力:
找到前端代码中collection_check_boxes对应的行,修改为:
<%= f.collection_check_boxes :Attending, [['Brunch'] ,['Ceremony']], :first, :last, include_hidden: false %>
内容的提问来源于stack exchange,提问作者marie566
相关产品推荐
相关产品推荐

