如何设计gem使其应用程序文件夹可用于Rails?

时间:2014-02-22 22:21:43

标签: ruby-on-rails ruby ruby-on-rails-3

我看到了他们的app文件夹,但我看不出这个文件夹是如何为Rails提供的。

我的尝试是搜索railtieviews_path,因为我有兴趣编写一个共享视图和帮助文件的gem。我怎么能这样做?

我可以找到有关此文档的文档?我应该谷歌用什么关键词:铁路,引擎?

1 个答案:

答案 0 :(得分:6)

像Devise这样的Gems使用Rails中提供的名为Engines.

的功能

引擎基本上允许您构建自己的功能部件并将它们无缝地插入到另一个应用程序中,从而有效地使引擎中的视图,模型和控制器可用,就好像它们是它的一部分一样。

Rails引擎不仅是一种在宝石中提供功能的好方法,而且还可以通过grouping together various pieces of functionality.

保持自己的应用整洁。

如果你想了解细节,Rails引擎只是一种特殊的Rack app.因此,它可以是mounted by the Rails router。简单来说,Rails路由器检测对这些应用程序已“安装”的路径的请求,并将它们路由到引擎而不是普通控制器提供的控制器。


请确保不要将此概念与Omniauth等其他宝石混淆使用。

此类宝石提供Rack Middleware,不一定需要通过Rails路由器集成到应用程序中。

你需要更多地了解Rack以了解它是如何工作的,但实质上每个对应用程序的请求都会在实际命中Rails路由器之前通过像Omniauth这样的中间件。所述中间件可以自己响应请求(基本上使其停止并且永远不会到达路由器和应用程序的其余部分),或“增加”请求(例如,Omniauth检查并执行身份验证,然后将数据存储在请求中env)将请求传递给下一个中间件。