通过 Rails 将对象作为变量发送到 Mandrill

Sending object as a variable to Mandrill via Rails

我正在将电子邮件模板从 Rails 转换为 Mandrill,其内容需要大量数据,其中一些数据通过多个关联嵌套。

因此,我想通过 Mandrill 的 global_merge_vars 传递对象,例如(简化)如下:

[{ 'name'=>'order', 'content'=> @order.to_json(include:
                                                { user: { only: :first_name } },
                                                  methods: [:method1,
                                                            :method2,
                                                            :method3,
                                                            :method4])
}]

它通过 order 变量下的 mandrill 模板类似于以下内容:

{"id":11,"number":"xxxx","item_total":"112.0"...
 "user":{"first_name":"Steve"},"method1":"£0.00","method2":"£112.00",
 "method3":"£112.00","method4":"£0.00"}

问题是,我无法访问 order 内的任何内容(使用 Handlebars),即 {{order.id}}{{order['id']}} 等将无法工作。

不能将数据分解为大量变量,因为有些元素是集合及其关联。

我认为问题的发生是因为在为 Mandrill 编译变量时所有内容都被字符串化了——因此破坏了 JSON 对象——以下是发送的内容片段:

"global_merge_vars"=>[{"name"=>"order", "content"=>"{\"id\":11,
\"number\":\"xxxx\",\"item_total\":\"112.0\"...

我似乎找不到任何处理此问题的文档/建议,所以我想知道是否可以传递这种性质的数据,如果可以,如何正确传递它以便能够访问Mandrill 模板中的对象。非常感谢任何建议!

史蒂夫。

试试这个:

[{ 'name'=>'order', 'content'=> JSON.parse(@order.to_json(include:
                                            { user: { only: :first_name } },
                                              methods: [:method1,
                                                        :method2,
                                                        :method3,
                                                        :method4]))
}]