从Ruby on Rails模型调用JavaScript函数

Call JavaScript function from Ruby on Rails model

本文关键字:调用 JavaScript 函数 模型 Rails Ruby on      更新时间:2023-09-26

我已经构建了一个Rails应用程序,它有一个返回JSON对象的API。我希望允许用户编写自己的脚本并存储它们。当用户调用应用程序的API时,这些脚本将被执行,并作为响应的一部分注入。

一个例子是当用户调用我的API时,他们的javascript将被调用,并且从他们的脚本返回的任何内容将被保存为字符串并由我的一个模型使用,并用作JSON对象的一部分-而不是完整的响应。

我想知道如何从rails模型调用javascript函数,将javascript的输出保存为Ruby中的字符串,然后能够在做出API响应之前处理返回的任何内容。

当前的答案似乎只与控制器和渲染为JS有关,但我想从模型执行脚本。

应该是这样的:

string = execute_javascript("return 'hello world';")

这与纯Ruby比Rails更相关,因为我只是想从标准Ruby类调用它并将输出保存为字符串。我还需要考虑这样做的安全含义,但首先想知道如何做到这一点

执行大多数常见Javascript代码的最简单的解决方案是使用ExecJS gem。如果你使用的是Rails标准gem包,那么ExecJS已经包含在Rails Coffeescript中了。一个简短的例子:

require "execjs"
ExecJS.eval "'red yellow blue'.split(' ')"
# => ["red", "yellow", "blue"]

上述解决方案只适用于运行原型的情况。在生产环境中,您可能希望以某种方式在沙箱中运行用户代码,最好是在完全不同的服务器上运行。您还需要确保代码在执行时不会占用服务器100%的资源,并筛选代码以确保它不会做任何恶意的事情。

你可以在Helper类中调用javascript函数,然后在你需要的地方将该Helper包含在你的模型中。