2011-04-04 135 views
28

使用omniauth寶石,我不得不定義一個路線回調成功的登錄,無論提供者:扶手:渲染並立即退出

def auth_callback 

     auth_data = request.env['omniauth.auth'] 

     if auth_data.has_key('something') 
      process_one(auth_data) 
     else 
      process_two(auth_data) 
     end 

     # No view is available here 

end 


def process_one 
    # do something then render view for process_one 
    return 
end 

def process_two 
    # do something then render view for process_two 
    return 
end 

我怎樣才能防止控制器返回auth_callback方法並嘗試顯示相應的視圖(不存在)?一旦process_one或process_two方法返回,治療應被視爲完成。

+0

你在你的方法'process_one'和'process_two'中有沒有返回代碼路徑嗎?如果是的話,你可以嘗試呈現:沒什麼=> true或別的東西有 – 2011-04-04 13:38:07

+0

我可以使用「如果(x)的渲染:process_one其他渲染:process_two」在auth_callback,但它是相當不自然:我寧願依靠process_one和process_two表達自己的觀點。 – 2011-04-04 13:46:57

+0

我的意思是如果你寫了一個簡單的'return'(或者像'return if(!something)'這樣的代碼)。軌道會嘗試呈現默認動作視圖 – 2011-04-04 13:53:51

回答

70

爲什麼不在這些方法中專門調用render

def process_one 
# do something then render view for process_one 
render :process_one and return 
end 

Rails應該檢測到你已經運行它,而不是嘗試再次渲染。

+0

作品。我認爲即使已經調用了渲染,Rails也會嘗試渲染auth_callback。非常感謝。 – 2011-04-04 13:53:38

+0

從控制器方法返回非常實用(不需要處理下面的代碼,通常在一些驗證之後)。 謝謝:) – lboix 2014-06-06 03:33:27

+0

由於渲染後沒有任何邏輯,在這種情況下是否需要返回?換句話說,如果該方法不返回nil,而是返回任何'render',那麼它可以嗎? – Dennis 2014-11-05 20:51:01