redirect_to!= return

我只是想对redirect_to的行为给予确认。

我有这样的代码:

if some_condition redirect_to(path_one) end redirect_to(path_two) 

如果some_condition = true我得到错误:

渲染和/或redirect在这个动作中被多次调用。 请注意,您可能只能调用渲染或redirect,而最多一次操作。

看来这个方法在redirect_to调用之后继续执行。 我是否需要像这样创build代码:

 if some_condition redirect_to(path_one) return end redirect_to(path_two) 

是的,您需要在redirect时从方法返回。 它实际上只是为响应对象添加适当的头文件。

你可以写更多的ruby方式:

 if some_condition return redirect_to(path_one) end redirect_to(path_two) 

或其他方式:

 return redirect_to(some_condition ? path_one : path_two) 

或者另一种方式:

 redirect_path = path_one if some_condition redirect_path = path_two end redirect_to redirect_path 

http://api.rubyonrails.org/classes/ActionController/Base.html

如果你需要redirect的东西,那么一定要添加“和返回”来暂停执行。

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

你也可以做

 redirect_to path_one and return 

这很好看。

值得注意的是,除非在redirect_to之后有任何代码,否则不需要return ,如下例所示:

 def show if can?(:show, :poll) redirect_to registrar_poll_url and return elsif can?(:show, Invoice) redirect_to registrar_invoices_url and return end end 

在Eimantas对两行代码的回答中巩固“rubyish way”的例子:

 return redirect_to(path_one) if some_condition redirect_to(path_two)