2015-05-11 9 views
8

Zastanawiam się, dlaczego nie ma podwójnego renderowania, gdy istnieje redirect_to lub render w before_action. Rozważmy następujący przykład:Dlaczego nie ma podwójnego renderowania podczas korzystania z before_action?

class SomeController < ApplicationController 
before_action :callback 

def new 
    callback2 
    render 'new' 
end 

def callback 
    render 'new' 
end 

def callback2 
    render 'new' 
end 

end 

widzę, że before_action będzie bezużyteczny, jeśli nie można przekierować, ale jak to jest? Jeśli skomentuję numer before_action, zostanie zgłoszony wyjątek. W jaki sposób zaimplementowano before_action, aby nie powodować podwójnego renderowania?

+0

Nie jestem pewien, czy dobrze rozumiem twoje pytanie, ale jeśli to zrobię, nie ma podwójnego renderowania, ponieważ nic nie zostało jeszcze wykonane. Wierzę, że 'before_action' zmienia to, co zostanie wyrenderowane. –

+0

Jeśli ustawiasz wywołanie zwrotne: before_action, to jest wywoływane przed załadowaniem działania, więc w kodzie, gdy je wywołasz, renderowanie wywołania zwrotnego "nowe" przed załadowaniem nowej akcji, używam słowa ładowania, aby zrozumieć je lepiej –

+0

Jak mogę wdrożyć moje posiadać 'before_action'? Podałem przykład z 'callback2' dla zilustrowania, że ​​bez' before_action' będzie podwójne renderowanie. – Marii

Odpowiedz

15

Zobacz Rails Guide on controllers:

Jeśli „przed” renderuje filtr lub przekierowania, akcja nie będzie działać. Jeśli po tym filtrze zaplanowano uruchomienie dodatkowych filtrów, zostaną one również anulowane.

Powiązane problemy