使用Mandrill时的Ruby引号语法

时间:2015-03-29 11:53:39

标签: ruby string smtp mandrill mailer

我有一个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字符串语法。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

我会试试这个:

headers['X-MC-MergeVars'] = "{\"tag_test_1\": \"#{temp_var}\"}"

或者这个:

headers['X-MC-MergeVars'] = %Q'{"tag_test_1": "#{temp_var}"}'

答案 1 :(得分:0)

首先,请务必注意,您不能在单引号中使用#{}语法。您只能在双引号内使用它。另请注意,当您使用新的哈希语法{'': ''}时,它会将字符串转换为符号。上面的答案应该有效。