Ruby 和规则引擎

Posted

技术标签:

【中文标题】Ruby 和规则引擎【英文标题】:Ruby & Rules Engines 【发布时间】:2010-10-23 15:28:49 【问题描述】:

我正在寻找一种简单的方法来让用户定义一组规则来过滤对象。

例如。让他们定义类似“如果预订日期 100.00,请通知我有关预订”

或多或少:我想要一个带有自定义 DSL 的 Ruby 规则引擎。

有图书馆提供吗?遇到了 Ruleby,但它还不支持自定义 DSL。

最好的方法是什么?

【问题讨论】:

【参考方案1】:

看看wongi-engine gem,它是一个基于 Rete 算法的新规则引擎,最近引起了相当多的关注。

【讨论】:

【参考方案2】:

看看Treetop。您可以将您的 DSL 定义为解析表达式语法,然后对其进行解析以创建您喜欢的任何格式的规则。

【讨论】:

您好,感谢您的回答。 Treetop 看起来确实是一个解决方案。您是否有任何最佳实践网站的链接?在网上很难找到好东西。我正在考虑以下方法: - 让用户定义他们的规则 - 使用 Treetop 解析这些 - 基于这些规则创建 Ruby 代码 - 将这些输入到 Ruleby - 使用规则引擎过滤我的对象 这听起来太奇怪了吗? 不幸的是,我也没有在 Treetop 上找到资源。但是您的解决方案听起来像是正确的方法。祝你好运!【参考方案3】:

我不确切知道应该如何以及在哪些对象上评估这些规则,但如果这些是 ActiveRecord 模型,那么Ambition 可能是可行的方法。它可以让你用 ruby​​ 编写条件,例如:

User.select  |m| m.name == 'jon' && m.age == 21 

这将转换为 SQL,您将获得满足给定条件的所有用户

【讨论】:

看起来不错,但已不再维护。

以上是关于Ruby 和规则引擎的主要内容,如果未能解决你的问题,请参考以下文章

几个常见规则引擎的简单介绍和演示

可与 Ruby 交互的轻量级推理引擎

规则引擎

常用规则引擎

旗正商业规则引擎和开源及其它规则引擎测试对比

规则引擎之EasyRules