Rails 4: before_filter vs. before before

340

W szynach> 4.0.0 generatory tworzą operacje CRUD z before_actionnie before_filter. Wydaje się, że robi to samo. Jaka jest różnica między tymi dwoma?

freemanoid
źródło

Odpowiedzi:

521

Jak możemy zobaczyć w ActionController::Base, before_actionjest po prostu nowa składnia dla before_filter.

Jednak cała before_filtersskładnia jest przestarzała w Rails 5.0 i zostanie usunięta w Rails 5.1

freemanoid
źródło
42
Z jednej strony wycofywanie ma sens, ale z drugiej strony istnieje dobra praktyka w szynach i ruby, aby mieć kilka aliasów dla jednej metody, dzięki czemu można jej używać w różnych kontekstach bez utraty znaczenia.
freemanoid
4
W 4.2 Nie deprecjonują go, ale usuwają go z dokumentów, ponieważ jest to odradzane. edgeguides.rubyonrails.org/…
onetwopunch
17
Jeśli jest to zniechęcone, to dlaczego byś tego nie zrobił ? Głupi.
Grant Birchmeier,
4
@JohnWhitley - wycofanie nie psuje interfejsu API. To jest cały punkt rezygnacji.
Grant Birchmeier,
9
@JohnWhitley - spamowanie jest z jakiegoś powodu. Każdy dobrze zdyscyplinowany projekt powinien uwzględniać ostrzeżenia o wycofaniu, nie używając przestarzałych funkcji .
Grant Birchmeier
67

To tylko różnica w składni, w aplikacji Railsowej jest CRUD i siedem akcji w zasadzie według indeksu nazw , nowe , tworzenie , pokazywanie , aktualizacja , edycja , niszczenie .

Railsy 4 ułatwiają programistom zmianę składni przed filtrowaniem na przed działaniem .

Metoda wywołania before_action przed czynnościami, które deklarujemy, jak

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

set_event to metoda, która będzie wywoływać zawsze przed pokazaniem, aktualizacją, edycją i zniszczeniem.

Awais
źródło
31

To tylko zmiana nazwy. before_actionjest bardziej szczegółowy, ponieważ jest wykonywany przed akcją.

Matthias
źródło
1

before_filter / before_action: oznacza wszystko, co należy wykonać przed wykonaniem jakiejkolwiek akcji.

Oba są takie same. są dla siebie tylko aliasami, ponieważ ich zachowanie jest takie samo.

Pankaj Dhote
źródło
-3

Aby dowiedzieć się, jaka jest różnica między przed aktywnością a przed_ filtrem, powinniśmy zrozumieć różnicę między akcją a filtrem.

Akcja to metoda kontrolera, do której można kierować. Na przykład strona tworzenia użytkownika może być przekierowana do UsersController # new - nowa jest akcja na tej trasie.

Filtry działają w odniesieniu do działań kontrolera - przed nimi, po nich lub wokół nich. Te metody mogą zatrzymać przetwarzanie akcji poprzez przekierowanie lub skonfigurowanie wspólnych danych dla każdej akcji w kontrolerze.

Szyny 4 -> _action

Szyny 3 -> _filter

yusefu
źródło