2011-12-25 52 views
0

首先,聖誕快樂!我一直在試圖做的是真正簡單的(理論上)。我有一個使用Mongoid運行的Devise身份驗證系統,因爲它是ODM。我想要做的是將某些用戶與其他用戶關聯,其中一個用戶是其他「子」用戶的「父母」。考慮家長控制 - 有一位父母擁有一個帳戶,然後他們的所有子女都與父母帳戶相關聯。父母賬戶因此具有特殊的「父母」角色,使他們能夠對其子女進行家長控制(或管理權利)。這裏只有相同的概念,我試圖在設計中使用Mongoid作爲ODM。 Can Can稍後將用於授權。Mongoid和Devise的「Parent」和「Child」用戶

我想到的第一個解決方案是將孩子嵌入父帳戶。我不想用嵌入來解決這個問題,因爲我沒有看到好處。 如果有人可以啓發我解決嵌入問題的好處,請做。我正在考慮改用has_many :users之類的東西。如果這可能會成爲問題,用戶真的可以在Devise + Mongoid中擁有很多用戶嗎?

我想要做的另一件事是從父模型和學生模型繼承User模型(與Devise中的一個)。我不知道這是否會與Devise 1.x(以及未來的2.x)一起工作,因爲我會繼承Devise模型。 如果您已經嘗試過,請告訴我您的經歷。

有了這種冗長的解釋,你的想法?

-Robert

使用Rails 3.1.X,1.5.x的設計,和Mongoid 2.3.x版本

+0

你真的需要使用設計嗎?使用Rails 3.1+進行身份驗證確實很容易,如果您想避免嘗試將其嵌入到設計中,您可以構建對您最合理的模型。 – 2011-12-27 17:42:41

+0

泰勒你的想法與我的一致!經過漫長的一天設計我的網絡應用程序中更復雜的部分(感謝上帝的流程圖),我意識到Devise對於這個應用程序太緊張了!我現在正在從頭開始扮演一些認證的角色! – 2011-12-28 00:26:22

+0

好,太棒了!這並不意味着你的問題不應該得到回答,而且我對設計不夠熟悉,無法幫助,對此抱歉。祝你好運。 – 2011-12-28 20:20:35

回答

1

可以使用STI(單表繼承),它可以提供一個單獨的層之間進行區分用戶的兩大類。

你可以如下做到這一點(交代的ActiveRecord的基礎上..你可以cgange有需要時):

class User < ActiveRecord::Base 
end 

class ParentUser < User 
end 

class ChildUser < User 
end 

爲此,您必須在用戶模型中添加type列。

所以每當你要創建一個ParentUser你可以做 parent_user = ParentUser.create()

和創建子用戶

child_user = ChildUser.create()

這裏http://rohitsharma9889.wordpress.com/2010/11/29/implement-sti-single-table-inheritance-in-your-rails-models/

您也可以參考這個更詳細的博客文章這裏的問題Rails devise registration form when having STI

+0

我最終偶然發現了這種類型的選項,但從來沒有時間來實現我在我的問題中討論的功能。謝謝你回答這個問題,因爲它表明我並不瘋狂,STI是一個可行的選擇。再次感謝。 – 2012-03-08 22:24:41