2012-06-20 62 views
1

有沒有辦法在padrino控制器內確定路由名稱是什麼?例如,在前面的塊中,我希望能夠根據路線採取一些預定的操作。所以,這樣的事情:Padrino:確定控制器中的路由名稱

before do 
    check_authorization_for(:route_name) 
end 

在哪裏「:ROUTE_NAME」會是這樣的「更新」或「刪除」或「創造」或什麼的。就像現在一樣,我只有代碼來檢查當前用戶是否有權在每個控制器方法的開始執行請求的操作。我們的授權方案依賴於我們數據庫中的信息,並且這些權限以控制器操作爲關鍵,因此如果有方法可以確定控制器中路由的名稱(即,如果我可以確定正在調用「更新」操作),我可以只用一個塊來測試授權,而不必在每個操作中進行檢查。

我覺得肯定有一個非常簡單的方法來做到這一點,但我似乎無法找到任何文檔。預先感謝您的幫助。

回答

4

嘗試

before :show, :edit, :destroy do 
    Post.find(params[:id]) 
end 

或者,如果你更喜歡直接的路線對象訪問:

request.route_obj 

request.route_obj.controller 

如果你想混電流路徑,存在導軌類似current_page東西。

# http://localhost:3000/category/1/products/page/3 
current_path('page' => 4) # => http://localhost:3000/category/1/products/page/4 
+0

不幸的是,這不是我正在尋找的。在我們的數據庫中,我們將擁有類似於{resource:'foo',action:'update',acl_id:1234}的授權記錄,因此在控制器中,我希望能夠執行類似「Actions」的操作。其中(資源:'foo',action:'update')「,以便找到」acl_id「值。在這個例子中,「update」是被調用的控制器動作,所以它不會在「id」參數中,它將是實際的控制器動作。那有意義嗎? – orderedchaos

+0

我已經更新了我的答案,我希望現在可以提供幫助 – DAddYE

+0

這幾乎就是我所需要的。我結束了使用request.route_obj.named.to_s,這讓我知道我在找什麼。我從來沒有見過或聽說過request.route_obj,所以這非常有幫助。非常感謝。 – orderedchaos

相關問題