2014-04-22 43 views
0

我一直在尋找一種方法比使用簡單其他事情來改變我的應用程序的默認路由(root_path專門)的if/then檢查不同類型的用戶。我發現了this在線代碼示例,但是我無法使其與我的應用程序一起工作,主要問題是我根本不明白底層代碼的作用,因此我無法將代碼調整到我的應用程序。在Rails中使用約束更改默認root_path一些用戶

首先我在路由器創建此規則:

root 'admin#index', constraints: RoleConstraint.new(:admin) 

然後我在lib目錄和用戶創建一個名爲role_constrait.rb新的文件驗證碼:

class RoleConstraint 
    def initialize(*roles) 
    @roles = roles 
    end 

    def matches?(request) 
    @roles.include? request.env['warden'].user.try(:role) 
    end 
end 

我看到傢伙在這裏使用監獄長,但是我使用康康,因爲這段代碼對我來說沒有意義,所以我不能對它做任何修改,但是從我嘗試過的,我一直得到未定義的本地變量或方法`root_path'錯誤。

非常感謝任何幫助!

+0

'warder'和'cancan'不同的東西,請告訴你使用'devise'寶石? –

+0

不,我正在使用魔法 –

+0

你不能使用這個例子,因爲'devise'它是warder中間件,'sorcery'有另一個邏輯。 –

回答

0

我不認爲路由器應該負責這樣做。這很難實施,也很難測試。 不止,它非常不一致 - 不同的用戶會在同一網址下看到不同的東西。通常情況下,人們會將管理區域包裝爲/admin範圍。因此,我的建議是直接進行路由(僅適用於/admin範圍),並將認證邏輯放入控制器(例如AdminController)。

如果您需要進一步的建議,請詢問。

+0

那麼我如何實現點擊主徽標邏輯,例如?我希望不同的角色具有不同的root_paths –

+0

那麼,我認爲這不是一個好的設計。對於所有的用戶主標誌點擊應該工作相同,因爲相同的URL應該導致相同的資源。 –

+0

我不同意這裏。無論如何,我已經從我的控制器中創建了所有必要的重定向。 –