代码之家  ›  专栏  ›  技术社区  ›  Karl

如何执行数据库中存储的代码?

  •  1
  • Karl  · 技术社区  · 16 年前

    基本上,我有一个rpg类型的rails应用程序。我将技能存储在技能数据库中,其中包含以下字段:名称、最低级别、技能类型、公式

    当前,我的公式存储为字符串。这个想法是让它说“1000*min_level”之类的话,然后运行它来计算技能伤害。

    有什么好办法吗?

    3 回复  |  直到 12 年前
        1
  •  1
  •   bojo    16 年前

    虽然最好将应用程序逻辑保留在应用程序本身中,但这只是使用eval()的简单问题。

    eval("1000 * %i" % min_level)
    
        2
  •  1
  •   Toby Hede    16 年前

    你可以用 埃瓦 . 如果min_level是作用域中的变量,则该字符串可以作为ruby执行,而无需任何中间步骤。

    当然,允许代码那样执行的巨大安全问题。取决于这些弦是从哪里来的。

        3
  •  1
  •   Mladen Jablanović    16 年前

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

    1. 在将表达式保存到数据库之前,分析并验证admin输入的表达式
    2. 实际上从数据库中计算表达式,只要您需要,就可以给出技能值和其他相关参数的散列值