Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby事件触发器_Ruby On Rails_Ruby_Oop - Fatal编程技术网

Ruby on rails Ruby事件触发器

Ruby on rails Ruby事件触发器,ruby-on-rails,ruby,oop,Ruby On Rails,Ruby,Oop,我正在寻找一种数据结构或设计模式来与rails和active record一起工作,以提供一种基于实时事件的可配置事件和事件触发器的方法 虽然这不是此类系统的最终用途,但我相信下面的示例演示了我正在尝试做的事情。与splunk这样的日志监控系统类似,我试图创建一个系统,在该系统中,我可以从对象中获取一些属性,然后将其与所需的值进行比较,并在评估为真时执行操作 是否有一个图书馆可以做到这一点,或者需要从头开始推出一些东西。我在设计时的想法类似于以下内容: 我将有一个Actor(不是传统的并发意义上

我正在寻找一种数据结构或设计模式来与rails和active record一起工作,以提供一种基于实时事件的可配置事件和事件触发器的方法

虽然这不是此类系统的最终用途,但我相信下面的示例演示了我正在尝试做的事情。与splunk这样的日志监控系统类似,我试图创建一个系统,在该系统中,我可以从对象中获取一些属性,然后将其与所需的值进行比较,并在评估为真时执行操作

是否有一个图书馆可以做到这一点,或者需要从头开始推出一些东西。我在设计时的想法类似于以下内容:

我将有一个Actor(不是传统的并发意义上的Actor),它将容纳我想要比较的属性。然后我将有一个触发器模型,它将有一个指向actor_id、属性(IE count)、comparator()、值和action_id的指针。action_id将指向一个具有perform方法的对象,该方法只包含触发时需要运行的代码

因此,最终触发器的计算结果如下:

action.perform if actor.send(attribute) comparator value
另一种可能更标准的选择似乎是开发DSL(即facebook的FQL)。这将是一种更好、更灵活的方法

这是一个图书馆可以处理的事情吗?如果不是,这是一个像样的系统结构,就像我建议的那样


编辑:看起来DSL可能是最灵活的方式

如果我正确理解了这个问题,你所写的内容就目前而言几乎是正确的。可以将比较运算符作为符号发送,如下所示:

comparator = :>
action.perform if actor.send(attribute).send(comparator, value)
# action will perform if actor's attribute is greater than value

如果我对这个问题理解正确,你所写的就目前而言几乎是正确的。可以将比较运算符作为符号发送,如下所示:

comparator = :>
action.perform if actor.send(attribute).send(comparator, value)
# action will perform if actor's attribute is greater than value

有趣的是,我实际上不知道你能做到,尽管我认为你能做到是有道理的。谢谢有趣的是,我实际上不知道你能做到,尽管我认为你能做到是有道理的。谢谢