61 votes

redirect_to != de retour

Je suis simplement pour lui donner confirmation en ce qui concerne le comportement de redirect_to.

J'ai un code qui ressemble à ceci:

if some_condition
   redirect_to(path_one)
end

redirect_to(path_two)

Si le some_condition = vrai j'obtiens l'erreur:

Rendu et/ou rediriger ont été appelés à plusieurs reprises dans cette action. Veuillez noter que vous pouvez uniquement appeler les rendre OU de les rediriger, et au plus une fois par action.

Il semble que la méthode de continuer à exécuter après l'redirect_to appel. Ai-je besoin de créer un code comme ceci:

if some_condition
   redirect_to(path_one)
   return
end

redirect_to(path_two)

?

95voto

Eimantas Points 29052

Oui, vous avez besoin de retourner à partir de la méthode lors de redirection. Il fait seulement ajoute des en-têtes appropriés pour la réponse de l'objet.

Vous pouvez écrire plus rubyish façon:

if some_condition
    return redirect_to(path_one)
end

redirect_to(path_two)

ou de l'autre façon:

return redirect_to(some_condition ? path_one : path_two)

ou d'une autre manière:

redirect_path = path_one

if some_condition
    redirect_path = path_two
end

redirect_to redirect_path

29voto

Vasiliy Ermolovich Points 14719

À partir de http://api.rubyonrails.org/classes/ActionController/Base.html:

Si vous avez besoin de rediriger sur la condition de quelque chose, alors assurez-vous pour ajouter "retour" pour interrompre l'exécution.

def do_something
  redirect_to(:action => "elsewhere") and return if monkeys.nil?
  render :action => "overthere" # won't be called if monkeys is nil
end

24voto

Rimian Points 7805

Vous pouvez aussi le faire

redirect_to path_one and return

qui se lit de nice.

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