如何执行存储在DB中的代码?

时间:2010-03-04 09:31:07

标签: ruby-on-rails ruby

基本上,我有一个RPG类型的Rails应用程序。我将技能存储在技能数据库中,其中包含以下字段:name,min_level,skill_type,formula

我的公式目前存储为String。这个想法是让它说出类似“1000 * min_level”的东西,并以某种方式运行它来计算技能伤害。

有没有好办法呢?

3 个答案:

答案 0 :(得分:1)

您可以使用 eval 。如果min_level是作用域中的变量,那么该字符串可以作为Ruby执行而无需任何中间步骤。

允许代码执行这样的巨大安全问题,当然。取决于这些字符串的来源。

答案 1 :(得分:1)

尽管将应用程序逻辑保留在应用程序本身中可能是最好的,但使用eval()会很简单。

eval("1000 * %i" % min_level)

答案 2 :(得分:1)

也许你可以尝试在两者之间做一些事情:不允许管理员直接编辑这些表达式,但是创建一些简单的(?)解析器,它将位于中间,哪个会

  1. 解析并验证管理员输入的表达式,然后将其保存到数据库
  2. 实际上从数据库中评估表达式,在您需要的时候给出技能值和其他相关参数的哈希值