我有一个Ruby on Rails应用程序,我正在编写邮件以将SMTP标头发送到Mandrill。 我认为将变量转换为字符串存在问题:
class MyMailer < Devise::Mailer
helper :application # gives access to all helpers defined within `application_helper`.
include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url`
def confirmation_instructions(record, token, opts={})
headers['X-MC-MergeVars'] = '{"ctoken1": "Drip Email"}'
temp_var = "Hello Everyone"
headers['X-MC-MergeVars'] = '{"tag_test_1": "yoyoyo"}' # 1
# headers['X-MC-MergeVars'] = "{'tag_test_1': 'yoyoyo'}" # 2
# headers['X-MC-MergeVars'] = "{'tag_test_1': #{temp_var}}" # 3
# headers['X-MC-MergeVars'] = '{"tag_test_1": #{temp_var}}' # 4
headers['X-MC-MergeVars'] = '{"ctoken3": "Test at the End"}'
super
end
end
我想将“temp_var”变量放入标题中。你可以看到我的4次尝试。
首先 - 健全性检查 - #1中的语法正常 - 我的mandrill电子邮件中的变量“tag_test_1”被“yoyoyo”取代,但当然这不是使用ruby变量。
我的尝试2,3或4都不起作用。我的Mandrill电子邮件收到TAG_TEST_1而不是变量替换(“Hello Everyone”)。
最终我要做的是通过Mandrill将帐户激活链接转换为电子邮件。所以我想我需要发送'token'变量,但是现在我似乎无法将已知变量(temp_var)传递给电子邮件。
我怀疑我没有正确理解Ruby字符串语法。
任何帮助表示赞赏!
答案 0 :(得分:0)
我会试试这个:
headers['X-MC-MergeVars'] = "{\"tag_test_1\": \"#{temp_var}\"}"
或者这个:
headers['X-MC-MergeVars'] = %Q'{"tag_test_1": "#{temp_var}"}'
答案 1 :(得分:0)
首先,请务必注意,您不能在单引号中使用#{}语法。您只能在双引号内使用它。另请注意,当您使用新的哈希语法{'': ''}
时,它会将字符串转换为符号。上面的答案应该有效。