在ERB模板中回显数组的危险

时间:2014-11-19 21:12:11

标签: python ruby erb

我在一个erbish模板中有一个python脚本,看起来像这样:

items = <%= some_array.sort.reverse %>

这种事情有危险吗?将ruby数组回显到python数组的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

调用<%= ... %>时的默认呈现是通过正在呈现的对象的.to_s。根据定义,.to_s不保证是双向的,并且有一些ruby构造一旦被渲染,就不能被反序列化(例如Hash)。

如果您确切知道要渲染的数组中的内容(例如,字符串列表),这可能没问题。但是,如果它不是一个简单的对象,您可能需要考虑手动渲染每个项目,或使用JSON序列化程序渲染对象,而不是依赖.to_s

items = json.loads('<%= JSON[some_array.sort.reverse] %>')