Ruby on rails 在Ruby中(安全地)解释用户输入的表达式
我正在创建一个Rails应用程序,它为多个客户端提供了一个电子商务元素,我希望这些客户端能够在管理区域中指定一个公式来计算它们的发货量;因为方法可能不同 让我们先假设我允许他们输入ruby代码,然后我稍后(在计算订单的发货量时)评估结果——这将是相当灵活的,因为如果我事先设置一些适当的变量,他们可以输入不同的公式,例如:Ruby on rails 在Ruby中(安全地)解释用户输入的表达式,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在创建一个Rails应用程序,它为多个客户端提供了一个电子商务元素,我希望这些客户端能够在管理区域中指定一个公式来计算它们的发货量;因为方法可能不同 让我们先假设我允许他们输入ruby代码,然后我稍后(在计算订单的发货量时)评估结果——这将是相当灵活的,因为如果我事先设置一些适当的变量,他们可以输入不同的公式,例如: 5.00#静态量-始终收取5.00 订单总额*0.1#订单价值的10% [order.total*0.1,3.00]。最多为总额的10%,或3.00,以较大者为准 订单。国外
- 5.00#静态量-始终收取5.00
- 订单总额*0.1#订单价值的10%
- [order.total*0.1,3.00]。最多为总额的10%,或3.00,以较大者为准
- 订单。国外运输?10.00:5.00#10.00海外客户,5.00国内客户
(当然,除非你能告诉我如何用ruby进行“安全”的沙盒评估,这也符合要求。)对于输入任意值,我建议看一看液体模板或辐射标记之类的东西——你可以构建自己的模板语言来隔离解释的代码 另一种方法是使用JavaScript(或CoffeeScript)并与JS解释器集成——有许多工具可以将Ruby连接到各种JS VM 也就是说,我认为通过一些智能用户界面来处理这个问题可能比让用户输入公式更容易。选择两个最有可能的装运选项,构建一组用于输入值的小部件,然后只需将其验证为整数即可 实际上,您的每个示例都可以使用这种方法进行处理
- 始终收费:$X
- 订单价值的X%
- 总额的X%,或$Y,以较大者为准
一直以来都是这样。谢谢您的评论。那里有一些好主意;我完全被你的Javascript建议所吸引(也许是johnson或therubyracer),尽管如果你的模板选项能够处理足够复杂的表达式,那么其中一个也可能是可行的;我会查出来的!