对于最新版本的
Ruby on Rails(在提出这个问题时有4个),实现修改请求/响应的代码(如身份验证机制)的首选方法是什么.我看到许多站点和教程提倡
Rack middleware,而看起来可以通过
Action Controller filter methods实现相同的功能.
除了讨论首选方法之外,还可以比较每种方法的优缺点吗?在我的初步调查中,似乎动作控制器过滤器方法更紧密地集成到RoR应用程序中,这样您就可以绕过在某些控制器端点上运行某些过滤器,而中间件似乎无法具有该级别的控制.像这样的细节会很棒.谢谢!
解决方法
Rack Middleware和ActionController过滤器真的很不一样.
Rack是标准的Ruby webserver接口.它的设计工作方式使得Rack应用程序或“Middlewares”可以链接在一起,每个都以特定方式转换请求/响应.如果您创建/使用机架中间件,您将有机会在实际到达Rails应用程序之前转换请求.
ActionController过滤器只是在Rails中直接控制器方法之前或之后执行的钩子之前/之后.这些将在控制器方法之前或之后立即调用,但是在Rails堆栈的整个剩余部分之后调用.
因此,通过Rack Middleware和ActionController过滤器可能存在显着差异,即,因为Rack Middleware在您的应用程序代码之前执行,它将不会在与您的应用程序代码相同的范围内执行 – 例如除非您明确要求并执行必要的初始化(如建立数据库连接),否则您将无法使用您的应用程序模型等.
如果你正在寻找经验法则,那么我会告诉你:
>如果要在特定控制器中的方法之前对请求执行某些操作,请在该控制器中使用before filter.
>如果您想在应用程序中的所有控制器方法之前对请求执行某些操作,并且您想要执行的操作非常特定于您的应用程序或依赖于您的应用程序代码,请在ApplicationController上使用过滤器.
>如果你想对请求做一些通用的事情,而不是完全依赖你的应用程序代码,并且你想象能够在另一个应用程序中重用它会很好,那么Rack Middleware会更合适.
希望有所帮助.