Fab*_*bio 28 ruby-on-rails-plugins rails-engines ruby-on-rails-3 railtie
我读了一些关于这些论点的文件,但我不清楚它们是什么,它们之间有什么区别,如果其中一个符合我的需要.
我需要编写一个可插入其他应用程序的应用程序,并希望将其作为gem包含在其他应用程序中.基本上我需要一些模型,一个控制器和没有视图,加上一些初始化,支持来自托管应用程序和生成器的配置参数.
我是正确的吗?
我应该阅读什么才能理解如何做到这一点?
更新:
有很多细节AF一个很不错的文章,可以发现在这里.
实质上:
Railtie是Rails框架的核心,它提供了几个钩子来扩展Rails和/或修改初始化过程.
Rails :: Engine只不过是一个已经设置了一些初始化程序的Railtie.由于Rails :: Application和Rails :: Plugin是引擎,因此这里描述的相同配置可以在所有三个中使用.
Railtie可以做你所描述的,但是使用引擎可能更合适.引擎可以有自己的配置,也可以像Rails应用程序一样,因为它允许您以与常规Rails应用程序相同的方式将/ app目录包含在控制器,视图和模型中.
Rails::Engine继承所有功能Rails::Railtie并添加更多功能(Engine < Railtie源代码 [ 源代码中的文档都不错])。
基本上,railtie(==继承自您的类Rails::Railtie)为您提供了与Rails应用程序交互所需的全部功能。
和发动机(==类,从继承Rails::Engine)是railtie +
设置了一些初始化程序(在initializermethod的帮助下):使您的引擎的类似Rails应用程序的文件夹结构可加载到实际应用程序中,以便
发动机会自动加载
app/models,app/controllers,app/helpers到你真正的应用程序,从负载路线config/routes.rb,从装载的语言环境config/locales/*,并从负载任务lib/tasks/*。
您可以看到使用以下代码设置的初始值设定项:
require 'rails/all'
Rails::Railtie.initializers.map(&:name) #=> []
Rails::Engine.initializers.map(&:name) #=> [:set_load_path, :set_autoload_paths, :add_routing_paths, :add_locales, :add_view_paths, :load_environment_config, :append_assets_path, :prepend_helpers_path, :load_config_initializers, :engines_blank_point]
Run Code Online (Sandbox Code Playgroud)一些方便的方法,例如isolate_namespace。
| 归档时间: |
|
| 查看次数: |
5232 次 |
| 最近记录: |