我正在构建一个Ruby on Rails应用程序,我希望能够编写响应应用程序范围事件的自定义插件。
例如,用户可以登记我的应用程序中的某个位置。发生这种情况时,我可能希望能够
关键是,我希望将上述操作与签入代码分离。我希望能够启用或禁用这些不同的代码片段。我应该能够在不触及签入代码库的情况下向代码中添加其他操作。
Ruby on Rails是否有任何机制可以做这样的事情?
谢谢!
答案 0 :(得分:1)
您所描述的内容实质上是一种通用的帖子/订阅机制。有一千种方法可以做到这一点,并且可能有许多库可用于github和rubygems。
他们的关键问题是,您想如何改变行为?您是否乐意在启动时调用某些功能来定义行为?在红宝石中,这很荒谬:
#! /usr/bin/ruby
@hooks = []
def run_hooks(*args)
@hooks.each { |hook| hook.call(*args) }
end
def on_trigger(&hook)
@hooks << hook
end
on_trigger { |*args| puts "This is one trigger: #{args.inspect}" }
on_trigger { puts "This is another trigger" }
run_hooks("some","params")
或者你想要更复杂的东西吗?
答案 1 :(得分:1)
虽然我确信还有很多其他的发布/订阅类型系统,但至少可以看看ActiveSupport::Notifications是否属于rails
通过向订阅者发布活动以及感兴趣的第三方订阅它们非常容易。应用程序日志文件中的运行时摘要是使用以下命令实现的:rails使用运行时信息发布事件,并提供将信息写入日志文件的订阅者。这也是activerecord查询日志记录的实现方式。