2014-01-24 76 views
1

我有一個區分爲6個角色的用戶模型,並且我定義了不同的變量並將它們引導到不同的視圖文件(類似的格式,但不同的信息表),但是在同一個控制器操作中,因爲它們都具有類似的頁面「概述」,「配置文件」,「消息」等。多個用戶角色的路由

現在控制器非常混亂,並且具有多個if/else語句。我相信我應該改變路線,以便每個用戶都有自己的控制器,從而消除當前侵入控制器的if/else monstrosity。

def index 
    if current_user.admin? 
    .... 
    end 
    if current_user.moderator? 
    .... 
    end 
end 

問:如何進行路由,使得URL將被 www.website.com/1/schedule,其中1 = current_user.id,而具有不同的控制器呈現不同的視圖文件?

我想做一個AdminController和一個ModeratorController來處理這個,但不知道如何做路由,或者如果確實這是做到這一點的最好方法。提前感謝您的建議!

+1

可能重複:http://stackoverflow.com/questions/11053175/devise-role-based-routing希望它能幫助你。 – Pavan

回答

0

我認爲你做錯了,如果你有不同的角色類似的頁面,那麼我認爲你正在訪問相同的模型來處理不同的角色。

如果是這種情況,那麼你應該使用像Cancan一樣的Ruby(Ruby on Rails授權庫)。

+0

我不是授權操作。我將完全轉到不同的頁面。管理員將呈現「admin_overview.html.slim」 –

0

爲了解決您的第二個問題,我認爲這不是最好的方法。試試這個 - 將您的邏輯從多個控制器移開,並將邏輯保存在ApplicationController中。我認爲你不應該將不同的角色分開給控制器。相反,看看你的用戶模型,並放入一個方法來檢查不同用戶的權限級別。您可以在用戶模型中創建可以在控制器中調用的方法,以查看是否允許用戶訪問該操作。我們會在這裏推薦before_action

如果您決定保留多個控制器,我建議像授權一樣的寶石。使它更容易跟蹤不同的權限,即使跨越不同的控制器 - 我認爲路由也是如此:https://github.com/nathanl/authority

+0

我目前在應用程序控制器中有這些查詢方法,這就是我如何分別在索引方法中測試用戶角色。我只是想知道if-else語句是否有解決更好結構的好方法。 –