加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Ruby中指定和执行规则

发布时间:2020-12-17 04:04:18 所属栏目:百科 来源:网络整理
导读:我正在寻找一个 Ruby / Rails工具,它将帮助我完成以下任务: 我想在我的数据库中存储以下字符串和类似的字符串.当创建,更新,删除对象等时,我想运行所有字符串,检查CRUD事件是否与字符串的条件匹配,如果是,则运行指定的操作. When a new ticket is created an
我正在寻找一个 Ruby / Rails工具,它将帮助我完成以下任务:

我想在我的数据库中存储以下字符串和类似的字符串.当创建,更新,删除对象等时,我想运行所有字符串,检查CRUD事件是否与字符串的条件匹配,如果是,则运行指定的操作.

When a new ticket is created and it's category=6 then notify user 1234 via email

我打算创建一个构建这些字符串的接口,因此它不需要是一个人类可读的字符串.如果JSONish结构更好,或者工具有现有语言,那就太棒了.我有点想法:

{
  object_types: ['ticket'],events: ['created','updated'],conditions:'ticket.category=6',actions: 'notify user',parameters: {
    user:1234,type:'email'
  }
}

所以基本上,我需要以下内容:

>监视CRUD事件 – 如果该工具有办法做到这一点会很好,但如果该工具本身不提供它,我可以在这里使用Rails的ModelObservers
>找到所有匹配的“规则” – 这是我的主要未知数……
>执行请求的方法/参数 – 理想情况下,这将在我的Ruby代码中定义为类/方法

我应该调查哪些现有工具?

编辑:

感谢你们到目前为止的回复!我真的很感谢你指着我走正确的道路.

这里的用例是我们有许多不同的客户端,有许多不同的业务规则.对于适用于所有客户端的规则,我可以轻松地在代码中创建它们(使用像Ruleby这样的东西),但是对于所有特定于客户端的规则,我想将它们存储在数据库中.理想情况下,规则可以写入一次,存储在代码中或DB中,然后运行(使用Resque来提高性能).

在这一点上,看起来我将不得不自己滚动,所以任何关于最好的方法或任何我应该调查的工具的想法都将非常感激.

再次感谢!

解决方法

我不认为自己写一些东西来做这件事是一件很重要的事情,我不知道有什么宝石可以做到这一点(但如果有人写了一个就好了!)

我会用以下方式处理项目,我想的方式是你不想在用户保存时进行规则匹配,因为它可能需要一段时间并且可能会中断用户体验和/或减慢速度服务器,所以……

>每次CRUD事件发生时,使用观察者存储记录,或者使用更简单的方法使用Acts as Audited gem为您执行此操作.

1.5.使用rake任务,从你的crontab运行来运行最新的更改,也许每分钟,或者你可以使用Resque,它可以很好地处理大量的工作

>创建一组表,用于定义用户可以选择的可能规则,可能是类似的

表:规则

名称

ForEvent(例如CRUD)

TableInQuestion

> FieldOneName
> FieldOneCondition等

MethodToExecute

您可以使用一些元编程来执行您的方法,因为您的方法知道您的表名和记录ID,然后可以选择这个.

补充说明

解决这个问题的最佳方法是从简单开始,然后向上工作.为了让简单的版本先工作,我会做以下事情……

>安装作为审计
>在创建的审计表中添加一个附加字段:when_processed
>在/ lib文件夹中创建一个名为processrules的模块,大致如此

3.1获取所有未处理的审计条目
3.2将它们标记为已处理(此时可能会生成另一个小型审计表以记录发生的事件)
>现在创建一个只有名称和条件语句的规则表,或者添加一些样本表来开始

姓名:首先|规则声明:’SELECT 1 WHERE table.value = something’
>调整新的processrules方法,为每个更改的条目执行该sql(可能您希望将其限制为您正在使用的表)
>如果规则匹配,请将其添加到日志文件中.

从这里你可以推断出你需要的其他功能,也许可以提出另一个关于动态调用方法的元编程方面的问题,因为这个问题非常广泛,我很乐意进一步提供帮助.

我倾向于认为进行任务处理的最佳方法是首先很好地设置该过程,以便它可以适用于任何服务器负载和情况,然后插入自定义位.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读