Rails 4:before_filter与before_action


Answers:


520

正如我们所看到ActionController::Basebefore_action只是一个新的语法before_filter

但是,Rails 5.0 中不推荐使用所有before_filters语法,Rails 5.1中将删除所有语法。


42
一方面,弃用是有道理的,但另一方面,在rails和ruby中也有一种很好的做法,即对一种方法使用多个别名,以便您可以在不同的上下文中使用它而不会失去意义。
Freemanoid

4
在4.2中,他们并不反对使用它,而是因为不鼓励将其从文档中删除。edgeguides.rubyonrails.org/…– onetwopunch 2014
18

17
如果不建议这样做,那为什么弃用它呢?愚蠢。
Grant Birchmeier 2015年

4
@JohnWhitley-弃用不会破坏API。这就是弃用的全部内容。
Grant Birchmeier

9
@JohnWhitley-垃圾邮件是有原因的。任何纪律严明的项目都应通过不使用不推荐使用的功能来解决不推荐使用的警告。
格兰特·伯奇迈尔

67

只是语法上的区别,在Rails应用程序中有CRUD,并且基本上按名称索引新建创建显示更新编辑销毁七个动作。

Rails 4使开发人员更容易在过滤器之前将语法更改为动作之前

在我们声明的动作之前的before_action调用方法,例如

before_action :set_event, only: [:show, :update, :destroy, :edit]

set_event是一种始终在显示,更新,编辑和销毁之前调用的方法。


31

这只是一个名称更改。before_action更为具体,因为它是在执行操作之前执行的。


1

before_filter / before_action:表示在执行任何操作之前要执行的任何操作。

两者都一样。它们只是彼此的别名,因为它们的行为是相同的。


-3

为了弄清楚before_action和before_filter之间的区别,我们应该了解action和filter之间的区别。

动作是可以路由到的控制器方法。例如,您的用户创建页面可能被路由到UsersController#new-new是此路由中的操作。

过滤器是针对控制器动作运行的-之前,之后或周围。这些方法可以通过将公用数据重定向或设置到控制器中的每个动作来停止动作处理。

Rails 4 –> _action

Rails 3 –> _filter

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.