通过 Rails 将对象作为变量发送到 Mandrill
Posted
技术标签:
【中文标题】通过 Rails 将对象作为变量发送到 Mandrill【英文标题】:Sending object as a variable to Mandrill via Rails 【发布时间】:2016-09-01 10:49:37 【问题描述】:我正在将电子邮件模板从 Rails 转换为 Mandrill,其内容需要大量数据,其中一些数据通过多个关联嵌套。
因此,我想通过 Mandrill 的 global_merge_vars 传递对象,例如(简化)以下:
[ 'name'=>'order', 'content'=> @order.to_json(include:
user: only: :first_name ,
methods: [:method1,
:method2,
:method3,
:method4])
]
通过order
变量下的山魈模板类似如下:
"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 对象——以下是发送的 sn-p:
"global_merge_vars"=>["name"=>"order", "content"=>"\"id\":11,
\"number\":\"xxxx\",\"item_total\":\"112.0\"...
我似乎找不到任何处理此问题的文档/建议,所以我想知道这是否可以传递这种性质的数据,如果可以,如何正确传递它以便能够访问对象在 Mandrill 模板中。任何建议都非常感谢!
史蒂夫。
【问题讨论】:
你可以像|* variable*|
一样访问它
谢谢@pitabasprathal,我改用 Handlebar 语法 - 会有什么不同吗?
【参考方案1】:
试试这个:
[ 'name'=>'order', 'content'=> JSON.parse(@order.to_json(include:
user: only: :first_name ,
methods: [:method1,
:method2,
:method3,
:method4]))
]
【讨论】:
大功告成,谢谢帮助!奇怪的是,我试过这个,虽然当时我的 Handlebars 语法有误:我正在搜索order['id']
,但它不起作用,正确的实现 order.id
。将两者结合起来让我到达了我需要的地方。非常感谢。以上是关于通过 Rails 将对象作为变量发送到 Mandrill的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Rails 通过 Web Sockets 发送二进制文件
将 JSON 对象从 rails 控制器发送到 Javascript
通过蓝牙发送序列化对象时出现 StreamCorruptedException