44 votes

Comment puis-je arrêter l'exécution du contrôleur après avoir utilisé redirect_to? (Utiliser des rails)

J'ai un contrôleur de multiples actions qui prennent :année et :mois les attributs de l'URL. J'ai fait une méthode privée check_date à de vérifier la date est valide et de vérifier la date n'est pas dans l'avenir.

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

Est-il un des rails de chemin de fin contrôleur de l'exécution après l' redirect_to?

Les moyens que je peux penser sont soit lancer une exception après l'redirect_to ou pour renvoyer une valeur de check_date et vérifier à chaque action, qu'appelle - quelque chose comme

def month_index 
  year = params[:year].to_i
  month = params[:month].to_i
  if !check_date(year, month)
    return
  ...
end

Mais je me demande si il y a une belle rails moyen de le faire. J'étais à moitié en espérant que le fait d'avoir appelé redirect_to rails serait reconnaître que je voulais s'arrêter, mais qui ne semble pas se produire.

48voto

Slipp D. Thompson Points 6293

Vous pouvez aussi faire:

 return redirect_to :action => 'index'
 

et

 return redirect_to :action => 'month_index', 
  :year => Date.today.year, 
  :month => Date.today.month,
  :type => params[:type]
 

car il semble plus agréable que de mettre le retour sur sa propre ligne (IMHO).

35voto

kch Points 25855

Vous voudrez probablement utiliser des filtres.

Si vous appelez votre check_date tant que before_filter dans le contrôleur, le fait qu'il soit restitué ou redirigé empêchera le contrôleur d'appeler jamais la méthode d'action. Il se termine là et ensuite.

16voto

vrish88 Points 3918

Vous pouvez jeter

 return false
 

où que vous vouliez que l'exécution du code dans votre action s'arrête

7voto

Sniggerfardimungus Points 5207

redirect_to indique simplement aux rails ce qu'il doit rendre quand il se termine. Les rails deviendront confus si vous ajoutez d'autres directives de rendu ou de redirect_to après celle que vous voulez vraiment, alors revenez du contrôleur après la redirect_to - c'est la façon la plus normale de faire des choses avec des rails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X