Ruby on rails 新手:过滤器是根据请求参数修改响应数据的正确位置吗?

Ruby on rails 新手:过滤器是根据请求参数修改响应数据的正确位置吗?,ruby-on-rails,filter,controller,Ruby On Rails,Filter,Controller,我的问题很简单:在一个一般复杂的web请求中,通常我们有很多关于请求参数的信息。在许多情况下,如果请求来自于点击第三方网站上的链接或电子邮件时事通讯,那么控制器操作甚至不应该对其中的一些参数感兴趣,例如referer_id(用于分析目的) 另一个示例:在quora上,如果输入以下url: 但是,如果您输入相同的url,但在最后使用(snids=24082824)参数,您将获得页面内容,以及一些额外的重叠内容(在本例中,是关于最后编辑问题的人的信息),那么您将被引导到普通网页 我认为检查控制器操作

我的问题很简单:在一个一般复杂的web请求中,通常我们有很多关于请求参数的信息。在许多情况下,如果请求来自于点击第三方网站上的链接或电子邮件时事通讯,那么控制器操作甚至不应该对其中的一些参数感兴趣,例如referer_id(用于分析目的)

另一个示例:在quora上,如果输入以下url: 但是,如果您输入相同的url,但在最后使用(snids=24082824)参数,您将获得页面内容,以及一些额外的重叠内容(在本例中,是关于最后编辑问题的人的信息),那么您将被引导到普通网页

我认为检查控制器操作中每个请求参数的存在和值是愚蠢的。这将在if-else-if-else汤中对操作进行urn


过滤器似乎是一个更好的替代方案,可以中断和解耦请求中所有不同的元素,对吗?使用过滤器,once可以在几秒钟内完全更改工作流,而不会中断和干扰控制器操作。控制器操作用于根据请求的url模式获取视图,但过滤器有责任修改请求/响应、拦截、记录甚至覆盖控制器操作,如果请求中有更多参数,对吗?

是的,过滤器是正确的方法。

只是一个小提示,我不会使用过滤器来修改请求和响应。如果过滤器可以使用这些对象,则这是可能的。使用过滤器来做一些小事情,以保持操作干净,或者强制执行特定于应用程序的访问控制,听起来不错。但是如果是关于修改请求和响应,那么我更喜欢定制机架中间件。毕竟,每个rails应用程序都是一个rack应用程序。

请参见,这就是我对rails的体验结束的地方。我是一个彻头彻尾的傻瓜,所以我想我必须在机架上做更多的研究。感谢您指出这一点。对于根据用户是新用户还是未登录而进行重定向之类的事情,过滤器是可以的,但是对于一些严重的请求破坏,我认为机架中间件是一种方法。检查一些关于过滤器的东西,我发现对于大多数以用户为中心的东西(即应用程序逻辑),机架中间件的级别太低,解决方案变得太复杂。但对于其他事情,这是好的。我使用它为不同的域名动态提供不同的内容。这里有一个参考,现在我对Rack也有点熟悉了,我也觉得它有点太低级了。针对我在问题中给出的quora示例,我仍然认为最好使用过滤器。过滤器的好处在于,它们还可以缓解耦合问题,但不会将请求/响应流完全带出应用程序级别。相反,它们的动作仍然局限在控制器中,这正是我想要保留的