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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top