Ruby 使用 Mandrill 时引用语法

Ruby Quotes Syntax when using Mandrill

我在 Rails 应用程序上有一个 Ruby,我正在编写我的邮件程序以将 SMTP headers 发送到 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" 变量放入 header。你可以看到我的4次尝试。

首先 - 完整性检查 - #1 中的语法工作正常 - 我的 mandrill 电子邮件中的变量 "tag_test_1" 被替换为 "yoyoyo" 但当然这没有使用 ruby变量。

None 我的尝试 2,3 或 4 成功了。我的 Mandrill 电子邮件收到 TAG_TEST_1 而不是变量替换 ("Hello Everyone")。

最终我要做的是通过 Mandrill 将帐户激活 link 发送到电子邮件中。所以我想我需要发送 'token' 变量,但现在我似乎无法获得一个已知变量 (temp_var) 来传递给电子邮件。

我怀疑我没有正确理解 Ruby 字符串语法。

感谢任何帮助!

我会试试这个:

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

或者这样:

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

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