【发布时间】:2021-10-31 05:17:48
【问题描述】:
我有一个部分 Javascript 对象,如下所示:
_chart.js.erb
{
chart: {
animation: <%= @animation %>
},
plotOptions: {
...
这部分作为视图的一部分按预期工作。
我需要将其转换为 JSON 以用作命令行实用程序的配置。
什么是加载部分、插入 ERB、转换为 JSON 并返回 JSON 的好方法?
这样的事情可能会奏效,但似乎是一个糟糕的解决方案:
respond_to do |format|
format.json {
js = File.read('app/views/trades/_chart.js.erb')
hsh = eval(ERB.new(js).result)
parsed = JSON.parse(hsh)
render json: parsed.to_json
}
【问题讨论】:
-
这听起来像是一个综合性的 X & Y 问题。如果您需要创建一个类似哈希的结构并在视图之外使用它,那么不要一开始就放入 js.erb 模板。
-
而只是使用序列化程序或方法方法,将数据作为输入并返回可以转换为 JSON 的哈希值。转到 JSON 后,除非您正在构建 Ruby Goldberg 机器(双关语),否则您不会将其转换回来。
-
我认为您不了解用例。我有已经在部分中使用的 Javascript 对象。我想将 same 部分作为 JSON 用于命令行工具。
-
+1 到@max 建议。如果您在视图之外需要它,则不应在视图中定义它。如果它是静态哈希,我会将其放入 YAML 文件(或类似文件)并将其发送到视图/您需要的任何其他地方。
-
是的,我明白了。您的部分应该只是做类似
let data = <%= raw @serialized_data.to_json %>;的事情。
标签: ruby-on-rails json ruby-on-rails-6