微信号:ruby_and_rails

介绍:[Ruby程序员]旨在分享最新的Ruby & Rails,移动开发以及其他相关技术的分享,内容通俗易懂,有来自北京,上海,广州的技术达人不定期的分享.

Rails框架的核心组建-Railtie

2015-08-15 01:04 Michael

Railtie 是Rails框架的核心,并提供了很多钩子方法用于扩展, 像很多Rails的核心组建Action Mailer, Action ControllerAction View, Active Record都是Railtie, 负责各自的初始化工作, 这就得益于Ralitie, 它使的其他组建可以使用在Rails的任何位置。


开发一个Rails的扩展并不是非要继承Railtie,但是如果需要与rails的其他组建进行交互的话,就需要使用Railtie了。


如果扩展的时候需要实现一下内容,则需要使用Railtie

    1. 初始化

    2. 配置Rails应用的configuration

    3. 添加key config.*到environment

    4. 添加rake任务

    5. 为ActiveSupport::Notifications添加接受者

创建自己的Railtie

使用railtie扩展rails, 创建一个类,继承自Rails::Railtie,并使用自己的命名空间,这个类必须保证在Rails启动时被加载,举个例子:

# lib/my_gem/railtie.rb

module MyGem

class Railtie < Rails::Railtie

end

end

# lib/my_gem.rb

require 'my_gem/railtie' if defined?(Rails)

初始化

添加一个初始化的步骤到我们的Railtie,只需要创建一个初始化的block

class MyRailtie < Rails::Railtie

initializer "my_railtie.configure_rails_initialization" do

# some initialization behavior

end

end

另外,这个block也可以接受app对象,如果需要访问某些特定应用程序的配置,像middleware.

class MyRailtie < Rails::Railtie

initializer "my_railtie.configure_rails_initialization" do |app|

app.middleware.use MyRailtie::Middleware

end

end

最后,我们也可以filter: before after做一些特殊初始化动作。

class MyRailtie < Rails::Railtie

config.app_generators.orm :my_railtie_orm

config.to_prepare do

MyRailtie.setup!

end

end

加载rake任务和生成器,如果我们的ralitie有rake任务,可以通过rake_tasks方法进行加载

class MyRailtie < Rails::Railtie

rake_tasks do

load "path/to/my_railtie.tasks"

end

end

默认rails从load path路径下加载生成器,但是如果我们像自定义加载路径,也可以通过generators这个方法

来加载。

class MyRailtie < Rails::Railtie

generators do

require "path/to/my_railtie_generator"

end

end




 
ruby程序员 更多文章 rails 中使用roo读取excel数据 ruby中的鸭子类型(duck type) Rails中如何使用jsonp实现跨域访问 一道笔试题 ruby设计模式-单例模式
猜您喜欢 完整Java开发中JDBC连接数据库代码和步骤 2015 BAT员工跳槽报告|100offer年终总结 微信红包“摇一摇”设计复盘—手机与电视的双屏互动实践 敏捷破冰之旅——路虽遥,行则至 全面解析Java注解