2010-11-04 169 views
2

在我的控制,我有:有没有办法停止执行调用方法来避免Rails中的DoubleRenderError?

def update 
    case params[:something] 
    when 'x' 
    if all_is_good 
     good_stuff_happens 
     flash[:notice] = "Good stuff happened" 
    else 
     access_denied 
    end 
    when 'y' 
    other_good_stuff_happens 
    flash[:notice] = "Other good stuff happened" 
    when 'z' 
    even_more_good_stuff_happens 
    flash[:notice] = "Even more good stuff happened" 
    end 
    redirect_to good_place_path  
end 

在我的ApplicationController我:

def access_denied 
    redirect_to message_path, :alert => 'Access Denied' 
end 

在大多数情况下,我总是想redirect_to的case语句后good_place_path。

偶尔,我想拒绝访问权限并将其留在那。有没有一种方法,我可以叫

acccess_denied 
从我的控制器

再没有返回给呼叫控制器(或者它试图做了第二次重定向,因此我得到的DoubleRenderError)。我知道我可以只把

redirect_to good_place_path  

在每个when语句,但我想知道是否有更优雅的解决方案。

谢谢。

肖恩

回答

5

redirect_to后添加return作品所以access_denied之后加入它应该正常工作。你基本上不想看到渲染,这是默认设置。

+0

谢谢Steve.I试图在access_denied方法的redirect_to之后直接返回,但它仍然是双重渲染的,因为它现在回到update方法并且仍在处理中。然后我尝试了你的第二个建议,并且工作正常。我实际上结束了:access_denied &&返回 – 2010-11-05 01:10:15

+0

是的,'rendering_method和return'在Rails中非常习惯。 – 2010-11-05 02:33:23

相关问题