Trilhos 4: before_filter vs. before_action

340

Nos trilhos> 4.0.0, os geradores criam operações CRUD before_actionsem before_filter. Parece fazer a mesma coisa. Então, qual é a diferença entre esses dois?

freemanoid
fonte

Respostas:

521

Como podemos ver na ActionController::Base, before_actioné apenas uma nova sintaxe para before_filter.

No entanto, todas as before_filterssintaxes foram descontinuadas no Rails 5.0 e serão removidas no Rails 5.1

freemanoid
fonte
42
Por um lado, reprovar faz sentido, mas, por outro lado, existe uma boa prática nos trilhos e no ruby ​​de ter vários pseudônimos para um método, para que você possa usá-lo em diferentes contextos sem perda de significado.
Freemanoid
4
Na versão 4.2, eles não estão obsoletos, mas estão removendo-os dos documentos, pois são desencorajados. edgeguides.rubyonrails.org/…
onetwopunch
17
Se é desencorajado, por que você não o deprecia? Boba.
Grant Birchmeier
4
@ JohnWhitley - a reprovação não quebra a API. Esse é o ponto principal da depreciação.
Grant Birchmeier
9
@ JohnWhitley - O spam é por uma razão. Qualquer projeto bem disciplinado deve endereçar avisos de reprovação ao não usar funções obsoletas .
Grant Birchmeier
67

É apenas uma diferença de sintaxe, no aplicativo Rails existe CRUD e sete ações basicamente por índice de nomes , novo , criar , mostrar , atualizar , editar , destruir .

O Rails 4 torna o desenvolvedor amigável para alterar a sintaxe antes do filtro para a ação anterior .

método de chamada before_action antes das ações que declaramos, como

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

set_event é um método que chamará sempre antes de mostrar, atualizar, editar e destruir.

Awais
fonte
31

É apenas uma mudança de nome. before_actioné mais específico, porque é executado antes de uma ação.

Matthias
fonte
1

before_filter / before_action: significa qualquer coisa a ser executada antes de qualquer ação ser executada.

Ambos são iguais. eles são apenas apelidos um para o outro, pois seu comportamento é o mesmo.

Pankaj Dhote
fonte
-3

Para descobrir qual é a diferença entre before_action e before_filter, devemos entender a diferença entre ação e filtro.

Uma ação é um método de um controlador para o qual você pode rotear. Por exemplo, sua página de criação de usuário pode ser roteada para UsersController # new - new é a ação nessa rota.

Os filtros são executados em relação às ações do controlador - antes, depois ou ao redor deles. Esses métodos podem interromper o processamento da ação redirecionando ou configurando dados comuns para todas as ações no controlador.

Trilhos 4 -> _action

Trilhos 3 -> _filter

yusefu
fonte