2012-10-23 23 views
0

我有一個帶有2個角色的Rails應用程序,比如說管理員和用戶。但事情是,管理員不會像ActiveAdmin那樣使用後端。我希望管理員和用戶都能看到相同的視圖,但根據角色,我限制他們可以看到的內容。我使用的是Cancan,但是因爲例如管理員和用戶都可以看到產品頁面,所以我最終在視圖和控制器操作內部有很多條件,例如,如果這是一個管理員顯示,如果不是,則會顯示。具有多個角色的Rails應用程序

所以我不認爲這是「Rails方式」。我最終得到了很多重複的代碼,並且在代碼裏面並沒有真正支持讓邏輯遠離視圖的想法。

所以我的問題是,什麼是最好的方式來實現這種情況與許多角色,但相同的意見。

謝謝。


我在想兩個選項,但我不喜歡。一個是將管理員重定向到另一個視圖,但這種方式大多數視圖是相同的,因此它根本不是DRY。 選項2是使用完全相同的視圖,但在視圖中添加了許多條件,所以我最終得到了一個包含代碼的巨大複雜視圖。我試圖找到一種讓事情變得乾爽而簡單的方法,並使視圖代碼免費。

回答

0

您可以將admin模塊作爲默認名稱空間,並將用戶作爲默認名稱空間。您可以在部分下提取公共代碼,並在admin和用戶模塊中使用相同的代碼。

通過這種方式,您可以將用戶和管理員的代碼分開,並且如果您將來決定爲管理員和用戶使用其他視圖,則可以在將來的某個時間進行分配。它贏得了勝利,不是任務。

  1. 有控制器作爲

    應用程序/控制器/管理/文章------ admin用戶的

    應用程序/控制器/篇----對於普通用戶

  1. v IEWS

    應用程序/視圖/管理/文章

    應用程序/視圖/文章

    應用程序/視圖/共享

+0

好的,這似乎很整潔,但現在我必須傳遞所有文件並在所有路徑的開始追加一個admin_。有沒有更簡單的方法來做到這一點? – user1069624

+0

看看這個鏈接獲取更好的主意 http://stackoverflow.com/questions/119197/the-rails-way-namespaces http://www.purpleworkshops.com/articles/grouped-controllers 。在簡而言之,您只需將他們的操作與普通用戶和管理員按名稱空間分開即可 – Ross

0

有不同的可能途徑。在「裝飾」模式的變化將浮現在腦海中所描述的here

這一段時間,我最後讀它,但我認爲其基本思想是把邏輯模型或助手。只要用戶登錄,並且可以看到他是管理員用戶還是普通用戶,則可以使用返回必要的html或文本的方法。

一個更簡單的方法是隻有兩個部分的一切。正如Ross在單獨的管理員名稱空間中所說的那樣,或者像_user_view_something一樣更簡單(但是如果以後需要更改它,則需要更多工作)。html.erb和_admin_view_something.html.erb。

有點類似的想法進入DCI模式。 This Blog給出了一些很好的概述,這可以發揮到Rails。這篇文章更多的是關於權限的問題,但是基本的想法是用用戶必要的功能補充用戶對象。

因此,您有基本的「do_something」方法,可以在視圖中呈現某些信息或將某些信息放入視圖中,並將其替換爲適合實際用戶角色的信息。

相關問題