Wie verhindere ich, Controller Ausführung nach redirect_to mit? (Verwendung Rails)
-
03-07-2019 - |
Frage
Ich habe einen Controller mit mehreren Aktionen, die nehmen: Jahr und: Monat als die URL-Attribute aus. Ich habe eine private Methode check_date gemacht Überprüfen Sie das Datum gültig ist, und prüfen Sie das Datum nicht in die Zukunft ist.
def check_date(year, month)
if month < 1 || month > 12 || year < 2000
flash[:notice] = I18n.t 'archive.invalid_date'
redirect_to :action => 'index'
elsif year > Date.today.year || (year == Date.today.year && month > Date.today.month)
flash[:notice] = I18n.t 'archive.no_future'
redirect_to :action => 'month_index',
:year => Date.today.year,
:month => Date.today.month,
:type => params[:type]
end
end
Gibt es eine Schiene Wegeregler Ausführung nach der Beendigung von redirect_to?
Ways I sind entweder denken kann, eine Ausnahme nach dem redirect_to zu werfen oder einen Wert von check_date zurückzukehren und es in jeder Aktion zu überprüfen, die es nennt - so etwas wie
def month_index
year = params[:year].to_i
month = params[:month].to_i
if !check_date(year, month)
return
...
end
Aber ich frage mich, ob es eine schöne Schiene Art und Weise, dies zu tun. Ich war halb Hoffnung, dass genannt redirect_to Schienen würde erkennen, wollte ich stoppen, aber das scheint nicht zu passieren.
Lösung
Sie möchten wahrscheinlich Filter verwenden.
Wenn Sie Ihren check_date
als before_filter
in der Steuerung aufrufen, die Tatsache, dass es gemacht oder umgeleitet wird die Steuerung von je Aufruf der Aktionsmethode verhindern. Es endet dort und dann.
Andere Tipps
Sie können auch tun:
return redirect_to :action => 'index'
und
return redirect_to :action => 'month_index',
:year => Date.today.year,
:month => Date.today.month,
:type => params[:type]
, da es sieht besser aus als Rückkehr setzen auf seine eigene Linie (IMHO).
Sie können in werfen
return false
, wo Sie die Ausführung von Code in Ihre Aktion beenden möchten
redirect_to sagt nur Schienen, was zu machen, wenn es fertig ist. Rails wird verwirrt, wenn man andere machen oder redirect_to Richtlinien nach dem man hinzufügen Sie wirklich wollen, so Rückkehr nur von der Steuerung nach dem redirect_to -. Es ist die ‚normale‘ Schienen Weg, Dinge zu tun
Ich denke, die OP über die Funktion von redirect_to
verwirrt ist.
redirect_to
wird am Ende der Aktion umleiten. Allerdings wird der Rest der Reglerfunktion wie gewohnt ausführen. Alles, was Sie zu tun haben (wie von anderen Leuten geschrieben) ist eine Rückkehr zu zählen, wie Sie sollten eine andere Funktion aufrufen.