在> 4.0.0的导轨中,生成器使用before_action而非before_filter创建CRUD操作。似乎做同样的事情。那么,这两者之间有什么区别?

#1 楼

正如我们在ActionController::Base中看到的那样,before_action只是before_filter的新语法。

但是所有before_filters语法在Rails 5.0中已弃用,并将在Rails 5.1中删除。

评论


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

– freemanoid
13年5月13日在11:04

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

– onetwopunch
2014年12月3日23:18

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

–格兰特·伯奇迈尔
15年1月16日在21:20

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

–格兰特·伯奇迈尔
15年4月29日在14:26

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

–格兰特·伯奇迈尔
2015年5月1日13:55



#2 楼

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

Rails 4使开发人员易于更改语法before过滤器转换为before动作。

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

在显示,更新,编辑和销毁之前。

#3 楼

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

#4 楼

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

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

#5 楼

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

action是可以路由到的控制器方法。
对于例如,您的用户创建页面可能会路由到UsersController#new-新路由就是此路由。

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


Rails 4 –> _action

Rails 3 –> _filter