以下是我的许多邮件模板之一:
<% if @system_email.present? && @system_email.try(:content).present? %>
<%= @system_email.content.to_s.gsub(
"::vUserName::", @wanted_equipment.try(:name) ).gsub(
"::iListingId::", @equipment.identifier).gsub(
"::vListingTitle::", @equipment.title).gsub(
"::vCategoryName::", @equipment.try(:category).try(:name)).gsub(
"::eListingType::", @equipment.listing_type ).gsub(
"::SYSTEM_COMPANY_NAME::", @system_company_name).gsub(
"::SITE_LISTING_URL::", link_to(@system_site_url, equipment_details_url(@equipment.slug))).html_safe
%>
ApplicationMailer
def newequip_matches_wanted
@system_email = SystemEmail.find_by(title: 'Equipment matches WantedEquipment')
@subject = @system_email.try(:subject).to_s
@subject = "Equipment matches WantedEquipment" if @subject.blank?
@equipment = Equipment.last
end
在尝试渲染此html.erb模板时,它会抛出错误说:
no implicit conversion of nil into String
Extracted source (around line #2):
<% if @system_email.present? && @system_email.try(:content).present? %>
<%= @system_email.content.to_s.gsub(..
我正在添加email.content只是为了显示考虑评论:
@system_email = SystemEmail.find_by(title: 'Equipment matches WantedEquipment')
=> #<SystemEmail id: 28, identifier: "MAIL-0000028", title: "Equipment matches WantedEquipment", subject: "Equipment matches WantedEquipment", content: "<p>Hello <strong>::vUserName::</strong>,</p>\r\n ...", footer: nil, status: 1, created_at: "2017-03-01 07:36:30", updated_at: "2017-03-01 07:40:07">
相同的模板适用于其他邮件程序。但它在这里抛出一个错误。有人能告诉我这里有什么问题吗?
答案 0 :(得分:1)
它表示隐式转换,显式存在:
2.3.1 :001 > nil.to_s
=> ""
所以你没有以下任何一个:@ equipment中的identifier,title,listing_type,slug,@ system_site_url或@system_company_name。 我也不知道你是否真的想使用@ equipment.title或使用电子邮件的标题。
这有点奇怪,但你可以尝试一下。重新定义NilClass的to_s方法并将to_s添加到每个字段。它会弹出你错过的东西。
class NilClass
def to_s; "NILNILNIL"; end
end
...
2.3.1 :010 > nil.to_s
=> "NILNILNIL"