免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3492 | 回复: 0
打印 上一主题 下一主题

如何在Rails Engine中实现Observer [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-30 12:33 |只看该作者 |倒序浏览
转:非飞

如何在Rails Engine中实现Observer


Rails::Engine使我们可以将一个完整的Rails应用打包,并在不同的应用中使用。在Rails 3中,每一个Rails::Application都是一个Engine,这使得我们可以非常容易的实现将我们的应用模块化。如何开发Rails::Engine已经有许多现有的开发教程,下面几个地址可以为我们开发Engine提供帮助:

Rails::Engine API
Rails 3 Plugins – Part 1 – The Big Picture
Rails 3 Plugins – Part 2 – Writing an Engine
Rails 3 Plugins – Part 3 – Rake Tasks, Generators, Initializers, Oh-My!
Rails 3 Plugins – Part 4 – More on Generators
ActiveRecord::Observer
ActiveRecord::Observer顾名思义,是采用的观察者模式进行设计。它对ActiveRecord模型的callbacks做出响应,就好像触发器一样。这样使得我们可以将一些不应在模型中存在的行为移出模型类,为它安置恰当的位置。例如我们可能需要在用户注册成功后发送邮件到用户的邮箱这样的行为。
在Rails Engine中实现Observer,包括一下两个步骤:

定义Observer


在你的项目中创建app/observers目录,用于保存observers。如果你希望将你的observers定义在自己的module中,你也可以修改你的目录为app/observers/{module_name},来存放observers。
  1. class ContactObserver < ActiveRecord::Observer  

  2.    def after_create(contact)  

  3.      contact.logger.info('New contact added!')  

  4.    end  

  5.   
  6.    def after_destroy(contact)  

  7.      contact.logger.warn("Contact with an id of #{contact.id} was destroyed!")  

  8.    end  

  9. end
复制代码
激活Observer


在Engine中定义需要激活的Observer。此步非常重要,因为observers必须被显式的激活才会生效。
  1. class Engine < Rails::Engine  

  2.    # 如果你的Observer被包裹在一个module中  

  3.    # 那么用字符串来替代symbol即可  

  4.    # 如:“MyModule::ContactObserver”  

  5.    config.active_record.observers = :contact_observer  

  6. end
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP