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)