Schienen 4: before_filter vs. before_action

340

In Rails> 4.0.0-Generatoren werden CRUD-Operationen mit before_actionnot erstellt before_filter. Es scheint dasselbe zu tun. Was ist der Unterschied zwischen diesen beiden?

freemanoid
quelle

Antworten:

521

Wie wir sehen in ActionController::Base, before_actionist nur eine neue Syntax für before_filter.

Die gesamte before_filtersSyntax ist jedoch in Rails 5.0 veraltet und wird in Rails 5.1 entfernt

freemanoid
quelle
42
Einerseits hat Verwerfen Sinn, andererseits gibt es in Schienen und in Ruby eine gute Praxis, mehrere Aliase für eine Methode zu haben, damit Sie sie in verschiedenen Kontexten ohne Bedeutungsverlust verwenden können.
Freemanoid
4
In 4.2 wird es nicht abgelehnt, sondern aus den Dokumenten entfernt, da davon abgeraten wird. edgeguides.rubyonrails.org/…
onetwopunch
17
Wenn es entmutigt ist, warum würden Sie es dann nicht ablehnen? Dumm.
Grant Birchmeier
4
@ JohnWhitley - Verfall bricht die API nicht. Das ist der springende Punkt der Ablehnung.
Grant Birchmeier
9
@ JohnWhitley - Das Spammen hat einen Grund. Jedes gut disziplinierte Projekt sollte sich mit Verfallswarnungen befassen, indem es keine veralteten Funktionen verwendet .
Grant Birchmeier
67

Es ist nur ein Syntaxunterschied, in der Rails-App gibt es CRUD und sieben Aktionen, im Wesentlichen nach Namensindex , neu , erstellen , anzeigen , aktualisieren , bearbeiten , zerstören .

Mit Rails 4 können Entwickler die Syntax vor dem Filtern in vor der Aktion ändern .

before_action Aufrufmethode vor den Aktionen, die wir deklarieren, wie z

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

set_event ist eine Methode, die immer vor dem Anzeigen , Aktualisieren, Bearbeiten und Zerstören aufgerufen wird.

Awais
quelle
31

Es ist nur eine Namensänderung. before_actionist spezifischer, weil es vor einer Aktion ausgeführt wird.

Matthias
quelle
1

before_filter / before_action: bedeutet alles, was ausgeführt werden muss, bevor eine Aktion ausgeführt wird.

Beide sind gleich. Sie sind nur Alias ​​für einander, da ihr Verhalten gleich ist.

Pankaj Dhote
quelle
-3

Um herauszufinden, was der Unterschied zwischen before_action und before_filter ist, sollten wir den Unterschied zwischen action und filter verstehen.

Eine Aktion ist eine Methode eines Controllers, zu der Sie eine Route erstellen können. Beispielsweise kann Ihre Seite zur Benutzererstellung an UsersController # new weitergeleitet werden - new ist die Aktion in dieser Route.

Filter werden in Bezug auf Controller-Aktionen ausgeführt - vor, nach oder um sie herum. Diese Methoden können die Aktionsverarbeitung stoppen, indem sie für jede Aktion in der Steuerung gemeinsame Daten umleiten oder einrichten.

Schienen 4 -> _Aktion

Schienen 3 -> _filter

Yusefu
quelle