RoR-首选-机架中间件或有源控制器过滤器?

一直按

对于Ruby on Rails的最新版本(询问此问题时为4),实现修改请求/响应的代码(例如身份验证机制)的首选方式是什么。我看到许多站点和教程都在倡导Rack中间件,而通过Action Controller过滤器方法似乎可以实现相同的功能

除了讨论首选方法之外,是否可以提供每种方法的优缺点的比较?在我的初步调查中,动作控制器筛选器方法似乎更紧密地集成到RoR应用程序中,这样您就可以绕过在某些控制器端点上运行某些筛选器,而中间件似乎无法拥有该级别的控制权。这样的细节会很棒。谢谢!

安德鲁

机架中间件和ActionController过滤器确实有很大的不同。

机架是标准的Ruby Web服务器界面。它的设计工作方式是可以将Rack应用程序或“中间件”链接在一起,每种应用程序都以特定的方式转换请求/响应。如果您创建/使用机架中间件,则有机会在请求真正到达Rails应用之前对其进行转换。

ActionController过滤器只是在Rails中直接控制器方法之前或之后执行的钩子之前/之后。这些将在控制器方法之前或之后立即调用,但整个Rails堆栈的其余部分之后调用。

因此,通过Rack中间件和ActionController过滤器可以实现的功能存在显着差异,即,由于Rack中间件在应用程序代码之前执行,因此不会在与应用程序代码相同的范围内执行-例如,您将不会除非您明确要求它们并执行必要的初始化(如建立数据库连接),否则将无法使用您的应用程序模型等。

如果您正在寻找经验法则,那么我要告诉您的是:

  1. 如果只想对特定控制器中的before方法进行请求,请在该控制器中使用before过滤器。

  2. 如果您想在应用程序中的所有控制器方法之前对请求执行某项操作,并且要执行的操作非常特定于您的应用程序或依赖于您的应用程序代码,请在ApplicationController上使用过滤器。

  3. 如果您想对请求做一些通用的操作,而不是完全与您的应用程序代码无关,并且您想能够在另一个应用程序中重用它,那将是一个更好的选择。

希望能有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

过滤LinkedList的首选方法

来自分类Dev

ROR-从控制器请求JSON

来自分类Dev

具有RoR的ParseHub Webhook

来自分类Dev

根据控制器名称更改实例变量-RoR

来自分类Dev

ROR:如何从视图中获取数据到控制器

来自分类Dev

如何在控制器(RoR)中调用方法?

来自分类Dev

根据控制器名称更改实例变量-RoR

来自分类Dev

在视图中从控制器调用方法(ROR)

来自分类Dev

按首选排序过滤列表

来自分类Dev

Android首选项微调器

来自分类Dev

提及首选浏览器的超链接

来自分类Dev

Android首选项微调器

来自分类Dev

获取特定的首选DNS服务器

来自分类Dev

从PreferenceFragment获取所有首选项

来自分类Dev

生产用RoR服务器

来自分类Dev

生产用RoR服务器

来自分类Dev

带有AngularJS的RoR的SPA架构

来自分类Dev

RoR教程测试是否有冲突?

来自分类Dev

首选项管理器无法从用户首选项中获取价值

来自分类Dev

如何在具有ROR的差异控制器中使用模型

来自分类Dev

在Joomla组件的首选项中为表单字段定义过滤器功能的位置

来自分类Dev

在Joomla组件的首选项中为表单字段定义过滤器功能的位置

来自分类Dev

为什么我的RoR路由使用与我指定的控制器不同的控制器?

来自分类Dev

angularjs:将数据从控制器传递到指令的首选方式是什么?

来自分类Dev

在基于文档的应用程序中为首选项控制器获取ManagedObjectContext

来自分类Dev

有没有在Eclipse中安装插件的首选方法?

来自分类Dev

以编程方式更改浏览器语言首选项

来自分类Dev

:输入类型=“ text”的首选类型选择器

来自分类Dev

Eclipse首选项同步器-更改密码