我正在构建的应用允许用户存储联系人的姓名和姓氏。名字是强制性的,但姓氏不是。在某些情况下,它们存在,在某些情况下它们不存在。
我尝试使用以下逻辑替换邮件程序中的FNAME和LNAME。我不得不在邮件中使用它,因为发送群发邮件的逻辑让我在其他地方没有空间。
message = @mailer.message.gsub! 'FNAME', contact.first_name if @mailer.message includes? ('FNAME')
@body = message.gsub! 'LNAME', contact.last_name || '' if message includes?('LNAME')
这会引发undefined method
包含?'with
错误类NoMethodError`。理想情况下,我想忽略gsub!如果邮件中没有LNAME或FNAME。
答案 0 :(得分:4)
#includes?
方法调用之前缺少一个点:
message = @mailer.message.gsub! 'FNAME', contact.first_name if @mailer.message.includes?('FNAME')
但是你不需要检查子串的存在#includes?
#gsub!
只会在匹配时替换内容,所以:
message = @mailer.message.gsub!('FNAME', contact.first_name)
如果@mailer.message
可能是nil
就够了,那么需要进一步检查:
message = @mailer.message.gsub!('FNAME', contact.first_name) if @mailer.message.present?
BTW #gsub!
会修改原始字符串,所以你可能真正想写的是:
if @mailer.message.present?
@mailer.message.gsub!('FNAME', contact.first_name)
@mailer.message.gsub!('LNAME', contact.last_name)
end