在rails >4.0.0生成器使用before_action而不是before_filter创建CRUD操作。它似乎做着同样的事情。这两者有什么区别呢?
当前回答
正如我们在ActionController::Base中看到的,before_action只是before_filter的一个新语法。
然而before_filter语法在Rails 5.0中已弃用,并将在Rails 5.1中被移除
其他回答
为了弄清楚before_action和before_filter之间的区别,我们应该理解action和filter之间的区别。
动作是可以路由到的控制器的方法。 例如,你的用户创建页面可能被路由到userscontroller# new - new是这个路由中的动作。
过滤器在控制器动作之前、之后或前后运行。 这些方法可以通过重定向或为控制器中的每个动作设置公共数据来停止动作处理。
Rails 4 - > _action Rails 3 - > _filter
正如我们在ActionController::Base中看到的,before_action只是before_filter的一个新语法。
然而before_filter语法在Rails 5.0中已弃用,并将在Rails 5.1中被移除
只是改了个名字而已。Before_action更具体,因为它在操作之前执行。
这只是语法上的不同,在rails应用中有CRUD和七个动作,基本上是通过名称索引,新建,创建,显示,更新,编辑,销毁。
Rails 4使它对开发人员非常友好,可以将语法在过滤前改为在操作前。
在我们声明的动作之前调用Before_action方法,例如
before_action :set_event, only: [:show, :update, :destroy, :edit]
Set_event是一个方法,它总是在显示、更新、编辑和销毁之前调用。
Before_filter /before_action:表示在任何操作执行之前执行的任何操作。
两者都是一样的。它们只是彼此的别名,因为它们的行为是相同的。
推荐文章
- 如何找到包含匹配值的哈希键
- 未初始化的常量ActiveSupport::Dependencies::Mutex (NameError)
- 如何在Rails中找到当前的路由?
- 在Ruby中->运算符叫什么?
- Rails参数解释?
- Ruby中DateTime和Time的区别
- 如何从代理服务器后面更新Ruby Gems (ISA-NTLM)
- 如何用另一个键替换哈希键
- 添加一个CSS类<%= f.submit %>
- attr_accessor和attr_accessible的区别
- 如何从Ruby文件路径中获得没有扩展名的文件名
- 创建新用户时出现ActiveModel::ForbiddenAttributesError
- rvm安装失败:“rvm不是一个函数”
- 覆盖设计注册控制器
- 学习Ruby on Rails