Rotaie 4: before_filter vs. before_action


340

In rails> i generatori 4.0.0 creano operazioni CRUD con before_actionno before_filter. Sembra fare la stessa cosa. Quindi qual è la differenza tra questi due?

Risposte:


521

Come possiamo vedere in ActionController::Base, before_actionè solo una nuova sintassi per before_filter.

Tuttavia, tutta la before_filterssintassi è obsoleta in Rails 5.0 e verrà rimossa in Rails 5.1


42
Da un lato deprecare ha senso, ma dall'altro c'è una buona pratica in rotaie e in ruby ​​avere diversi alias per un metodo in modo da poterlo usare in contesti diversi senza perdita di significato.
freemanoid,

4
In 4.2 Non lo stanno deprecando, ma rimuovendolo dai documenti poiché è scoraggiato. edgeguides.rubyonrails.org/…
onetwopunch il

17
Se è scoraggiato, allora perché non lo deprecheresti? Silly.
Grant Birchmeier,

4
@JohnWhitley - la deprecazione non interrompe l'API. Questo è l'intero punto di deprecazione.
Grant Birchmeier,

9
@JohnWhitley - Lo spamming è per un motivo. Qualsiasi progetto ben disciplinato dovrebbe rispondere agli avvisi di deprecazione non utilizzando funzioni deprecate .
Grant Birchmeier,

67

È solo la differenza di sintassi, nell'app Rails c'è CRUD e sette azioni sostanzialmente per indice dei nomi , nuove , crea , mostra , aggiorna , modifica , distruggi .

Rotaie 4 Make It sviluppatore amichevole per la sintassi cambiamento prima del filtro di prima dell'azione .

before_action chiama il metodo prima delle azioni che dichiariamo, come

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

set_event è un metodo che chiamerà sempre prima di mostrare, aggiornare, modificare e distruggere.


31

È solo un cambio di nome. before_actionè più specifico, perché viene eseguito prima di un'azione.


1

before_filter / before_action: indica qualsiasi cosa da eseguire prima di eseguire qualsiasi azione.

Entrambi sono uguali. sono solo alias l'uno per l'altro poiché il loro comportamento è lo stesso.


-3

Per capire qual è la differenza tra before_action e before_filter, dovremmo capire la differenza tra azione e filtro.

Un'azione è un metodo di un controller a cui è possibile indirizzare. Ad esempio, la pagina di creazione dell'utente potrebbe essere indirizzata a UsersController # new - new è l'azione in questa route.

I filtri vengono eseguiti in relazione alle azioni del controller - prima, dopo o intorno a loro. Questi metodi possono arrestare l'elaborazione dell'azione reindirizzando o impostando dati comuni su ogni azione nel controller.

Rotaie 4 -> _action

Rotaie 3 -> _filter

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.