问题
In rails >4.0.0 generators creates CRUD operations with before_action
not before_filter
. It seems to do the same thing. So what\'s the difference between these two?
回答1:
As we can see in ActionController::Base
, before_action
is just a new syntax for before_filter
.
However all before_filters
syntax are deprecated in Rails 5.0 and will be removed in Rails 5.1
回答2:
It is just syntax difference, in rails app there is CRUD, and seven actions basically by name index, new, create, show, update, edit, destroy.
Rails 4 make it developer friendly to change syntax before filter to before action.
before_action call method before the actions which we declare, like
before_action :set_event, only: [:show, :update, :destroy, :edit]
set_event is a method which will call always before show, update, edit and destroy.
回答3:
It is just a name change. before_action
is more specific, because it gets executed before an action.
回答4:
To figure out what is the difference between before_action and before_filter, we should understand the difference between action and filter.
An action is a method of a controller to which you can route to. For example, your user creation page might be routed to UsersController#new - new is the action in this route.
Filters run in respect to controller actions - before, after or around them. These methods can halt the action processing by redirecting or set up common data to every action in the controller.
Rails 4 –> _action
Rails 3 –> _filter
回答5:
before_filter/before_action: means anything to be executed before any action executes.
Both are same. they are just alias for each other as their behavior is same.
回答6:
before_filter gets invoked whenever any method in the controller gets called.
before_action gets invoked when controller methods which are registered in routes configuration file are called.
来源:https://stackoverflow.com/questions/16519828/rails-4-before-filter-vs-before-action