Rails 4: before_filter contre before_action

340

Dans rails> 4.0.0, les générateurs créent des opérations CRUD avec before_actionnot before_filter. Il semble faire la même chose. Alors, quelle est la différence entre ces deux?

freemanoid
la source

Réponses:

521

Comme on peut le voir dans ActionController::Base, before_actionest juste une nouvelle syntaxe pour before_filter.

Cependant, toute la before_filterssyntaxe est déconseillée dans Rails 5.0 et sera supprimée dans Rails 5.1

freemanoid
la source
42
D'une part, la dépréciation a du sens, mais d'autre part, il existe une bonne pratique dans les rails et en rubis pour avoir plusieurs alias pour une méthode afin que vous puissiez l'utiliser dans différents contextes sans perte de sens.
freemanoid
4
En 4.2 Ils ne le déprécient pas, mais le retirent des documents car il est déconseillé. edgeguides.rubyonrails.org/…
onetwopunch
17
Si c'est découragé, alors pourquoi ne pas le déprécier? Idiot.
Grant Birchmeier
4
@JohnWhitley - la dépréciation ne casse pas l'API. C'est tout le point de la dépréciation.
Grant Birchmeier
9
@JohnWhitley - Le spamming est pour une raison. Tout projet bien discipliné doit répondre aux avertissements de dépréciation en n'utilisant pas les fonctions obsolètes .
Grant Birchmeier
67

C'est juste une différence de syntaxe, dans l'application rails, il y a CRUD, et sept actions essentiellement par index de nom , nouveau , créer , afficher , mettre à jour , éditer , détruire .

Rails 4 permet aux développeurs de changer la syntaxe avant le filtre en avant l'action .

méthode d'appel before_action avant les actions que nous déclarons, comme

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

set_event est une méthode qui appellera toujours avant show, update, edit et destroy.

Awais
la source
31

C'est juste un changement de nom. before_actionest plus spécifique, car il est exécuté avant une action.

Matthias
la source
1

before_filter / before_action: signifie tout ce qui doit être exécuté avant l'exécution de toute action.

Les deux sont les même. ils sont juste alias l'un pour l'autre car leur comportement est le même.

Pankaj Dhote
la source
-3

Pour comprendre quelle est la différence entre before_action et before_filter, nous devons comprendre la différence entre action et filtre.

Une action est une méthode d'un contrôleur vers laquelle vous pouvez router. Par exemple, votre page de création d'utilisateur peut être acheminée vers UsersController # new - nouvelle est l'action dans cette route.

Les filtres s'exécutent en fonction des actions du contrôleur - avant, après ou autour d'eux. Ces méthodes peuvent interrompre le traitement de l'action en redirigeant ou en configurant des données communes vers chaque action dans le contrôleur.

Rails 4 -> _action

Rails 3 -> _filter

yusefu
la source