对于Ruby on Rails的最新版本(询问此问题时为4),实现修改请求/响应的代码(例如身份验证机制)的首选方式是什么。我看到许多站点和教程都在倡导Rack中间件,而通过Action Controller过滤器方法似乎可以实现相同的功能。
除了讨论首选方法之外,是否可以提供每种方法的优缺点的比较?在我的初步调查中,动作控制器筛选器方法似乎更紧密地集成到RoR应用程序中,这样您就可以绕过在某些控制器端点上运行某些筛选器,而中间件似乎无法拥有该级别的控制权。这样的细节会很棒。谢谢!
机架中间件和ActionController过滤器确实有很大的不同。
机架是标准的Ruby Web服务器界面。它的设计工作方式是可以将Rack应用程序或“中间件”链接在一起,每种应用程序都以特定的方式转换请求/响应。如果您创建/使用机架中间件,则有机会在请求真正到达Rails应用之前对其进行转换。
ActionController过滤器只是在Rails中直接控制器方法之前或之后执行的钩子之前/之后。这些将在控制器方法之前或之后立即调用,但在整个Rails堆栈的其余部分之后调用。
因此,通过Rack中间件和ActionController过滤器可以实现的功能存在显着差异,即,由于Rack中间件在应用程序代码之前执行,因此不会在与应用程序代码相同的范围内执行-例如,您将不会除非您明确要求它们并执行必要的初始化(如建立数据库连接),否则将无法使用您的应用程序模型等。
如果您正在寻找经验法则,那么我要告诉您的是:
如果只想对特定控制器中的before方法进行请求,请在该控制器中使用before过滤器。
如果您想在应用程序中的所有控制器方法之前对请求执行某项操作,并且要执行的操作非常特定于您的应用程序或依赖于您的应用程序代码,请在ApplicationController上使用过滤器。
如果您想对请求做一些通用的操作,而不是完全与您的应用程序代码无关,并且您想能够在另一个应用程序中重用它,那将是一个更好的选择。
希望能有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句