`
非飞
  • 浏览: 80327 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何在Rails Engine中实现Observer

阅读更多

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

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

     

    FROM:http://hetao.im

  •  

    0
    2
    分享到:
    评论

    相关推荐

      component base rails applications

      在掌握了以上知识点后,开发人员能够更加系统地了解如何利用Rails Engine来实现模块化的Rails应用,从而提高代码的复用性、可维护性和扩展性。通过拆分成组件,还能让团队分工更加清晰,提高开发效率,减少代码间的...

      在rails中 使用RSpec生产CHM文档

      标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

      RailsGuides中那个blog程序源码

      Rails的 erb(Embedded Ruby)模板引擎允许开发者在HTML中嵌入Ruby代码,实现动态内容生成。 **控制器(Controller)** 是模型和视图之间的桥梁,处理用户的请求,调用模型进行业务处理,并将数据传递给视图进行...

      关于rails学习中分页的示例

      这篇关于“rails学习中分页的示例”的文章可能涵盖了如何在Rails应用中实现分页的详细步骤。 在Rails中,最常用的分页库是`Kaminari`和`WillPaginate`。这里我们将以`Kaminari`为例进行讲解,因为它是近年来更受...

      Ruby on Rails中文指南

      在Ruby on Rails中文指南中,你将全面学习到如何利用这个强大的框架来构建动态的、数据驱动的Web应用程序。 首先,让我们深入理解Rails的核心概念: 1. **路由(Routes)**:Rails的路由系统是应用程序的导航蓝图...

      Ruby-这是一个在Rails应用程序中使用React并使用webpack的示例

      在开发过程中,可以利用webpack的热模块替换功能(Hot Module Replacement,HMR)实现快速迭代。在生产环境中,webpack会进行优化,如代码分割、tree shaking等,以提高加载速度。 总结来说,这个示例展示了如何在...

      Rails的中文乱码问题

      标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在...

      rails2.0下实现《rubyonrails》中的mybook实例

      在这个实例中,我们将探讨如何在Rails应用中使用SQLite3数据库,通过`sqlite3.exe`这个小巧而强大的数据库管理工具来实现数据存储。SQLite3是嵌入式的数据库引擎,无需单独的服务器进程,非常适合用于开发阶段或者轻...

      shoppe-example, 在 Rails 中使用Shoppe平台的示例存储实现.zip

      shoppe-example, 在 Rails 中使用Shoppe平台的示例存储实现 这是一个 Rails 应用程序,它使用 Shoppe 构建。 它具有一个可以爱的设计,以充分演示Shoppe平台提供的功能以及它在 Rails 应用程序中的。 正在启动要开始...

      使用Aptana+Rails开发Rails Web应用(中文)

      安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...

      Struts2和Rails的国际化实现

      总结来说,Struts2和Rails的国际化实现都是基于资源文件,并通过特定的API或辅助方法在代码中引用这些资源。它们都考虑了会话和请求的上下文来自动选择合适的语言,并提供了手动切换语言的能力。尽管实现方式有所...

      Rails 中mongrel的安装

      在Rails项目中安装Mongrel通常通过RubyGems进行,这是一个Ruby的包管理器。首先确保RubyGems已经安装,然后在命令行执行以下命令: ```bash gem install mongrel ``` 安装完成后,可以通过`mongrel_rails`命令来...

      Rails 101 入门电子书

      - 如何在Rails中实现RESTful接口。 - **案例分析**: - 分析一个典型的RESTful应用示例。 #### 九、练习作业2-在Group里面发表文章-双层RESTFul - **目标**: - 在Group中添加Post功能。 - **实现过程**: - 创建...

      Rails101_by_rails4.0

      此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

      rails中使用javascript日期控件

      这篇博文“rails中使用javascript日期控件”探讨了如何在Rails应用中集成和使用JavaScript日期选择器,以实现更高效、友好的前端交互。 首先,我们需要了解JavaScript日期控件的基本概念。JavaScript是一种在客户端...

      Ruby-GoogleSignInforRails实现将Google登录集成到您的Rails应用中

      Google Sign-In for Rails 实现将Google登录集成到您的Rails应用中

      rails实现验证码实例

      本实例将详细介绍如何在Rails应用中实现一个简单的图形验证码。 首先,我们需要一个字体配置文件来生成验证码中的随机字符。字体配置文件可以包含多个字体样式,用于增加验证码的复杂性和可读性。在Rails项目中,...

    Global site tag (gtag.js) - Google Analytics