Rails 4: before filter vs. before action

W rails >4.0.0 Generatory generują operacje CRUD z before_action nie before_filter. Wydaje się, że robi to samo. Więc jaka jest różnica między tymi dwoma?

Author: Andrei Eliade, 2013-05-13

5 answers

Jak możemy zobaczyć w ActionController::Base, before_action jest tylko nową składnią dla before_filter.

Jednak wszystkie before_filters składnia są przestarzałe w Rails 5.0 i zostaną usunięte w Rails 5.1

 469
Author: freemanoid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-12 05:13:32

To tylko różnica w składni, w aplikacji rails jest CRUD, a siedem akcji w zasadzie po nazwie index, Nowe, Utwórz, Pokaż, Aktualizacja, edytuj, destroy .

Rails 4 sprawia, że jest przyjazny dla programistów, aby zmienić składnię przed filtrem na przed działaniem.

Before_action wywołanie metody przed działaniami, które deklarujemy, jak

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

Set_event {[3] } jest metodą, która wywoła zawsze przed pokazaniem, aktualizacją, edycją i zniszczeniem.

 60
Author: Awais,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-06 13:31:58

To tylko zmiana nazwy. before_action jest bardziej konkretna, ponieważ jest wykonywana przed akcją.

 29
Author: Mattherick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-24 16:22:41

Aby dowiedzieć się jaka jest różnica między before_action a before_filter, powinniśmy zrozumieć różnicę między action a filter.

Akcja jest metodą kontrolera, do którego można się dostać. Na przykład, Twoja strona tworzenia użytkownika może zostać przekierowana do UsersController#new - NEW jest akcją w tej trasie.

Filtry działają w odniesieniu do akcji kontrolera - przed, po lub wokół nich. Metody te mogą zatrzymać przetwarzanie akcji poprzez przekierowanie lub skonfigurowanie wspólne dane dla każdej akcji w kontrolerze.

Rails 4 –> _action

Rails 3 - > _filter

 0
Author: yusefu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 05:51:41

Before_filter / before_action: oznacza wszystko, co ma być wykonane przed wykonaniem jakiejkolwiek akcji.

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

 0
Author: Pankaj Dhote,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-30 10:52:23