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?

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


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.


31

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


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.


-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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.