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

时间:2016-05-06 11:20:05

标签: ruby-on-rails json handlebars.js actionmailer mandrill

我将电子邮件模板从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模板中的对象。任何建议都非常感谢!

史蒂夫。

1 个答案:

答案 0 :(得分:1)

试试这个:

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