2011-01-10 29 views
1

我的應用程序有一些簡單的訪問級別檢查的用戶模型。此訪問級別確定對數據庫中其他模型的訪問範圍。準確地說,我有地區,學校,教師,房間和學生模型。一個管理員可以看到所有的記錄,一個小區可以看到所有的小孩學校,老師,房間和學生,一個校長可以看到所有小孩的老師,房間和學生,一個老師可以看到所有小孩的房間和學生。創建一個虛假的has_many關係 - 取決於其他成員var

這是通過將用戶對象與一個或多個級別的模型關聯來完成的。

belongs_to :district 
belongs_to :school 
belongs_to :teacher 

因此,學校校長將有一個地區ID和學校ID,但其教師ID將爲空。

訪問孩子們通過功能控制是這樣的:

def teachers 
    if is_admin? 
     Teacher.all 
    elsif is_district_head? 
     district.teachers 
    elsif is_principal? 
     school.teachers 
    else 
     [ teacher ] 
    end 
end 

本功能在代碼視爲好像它是一個普通的舊的has_many的關係,在這裏我們可以做的東西,如:

current_user.teachers.find param[:teacher_id] 
current_user.teachers.each {|t| puts t.id } 

無論current_user是管理員還是教師或其中的任何人,都會返回正確數量的教師。

除了,這是可悲的情況並非如此。只有實際的has_many關係才能完全工作,當我嘗試使用.find時,我的假關聯會失敗,或者由has_many創建的ActiveRecord集合特定的某個函數。

所以,對我的問題。如何在不明確調用has_many函數的情況下返回ActiveRecord集合對象?

如果你認爲我是一個流血的阻滯,我錯過了一些顯而易見的東西,請不要猶豫,給我啓發!我曾認爲這個系統很好,直到我不得不使用管理員級別的用戶帳戶。它本質上正在運行

Teacher.all.find :conditions => 'xyz' 

...並且可悲地返回Enumerator對象而不是教師模型的ActiveRecord。

回答

0

基本上你有四個角色(管理員,地區負責人,校長和教師(?))。每個用戶都有這些角色之一,並且您有一組規則來確定每個角色的訪問權限。正確?

此問題已解決。我會敦促你考慮一個授權系統,如CanCan或聲明授權。兩者都包含直截了當的方式來處理你在這裏掙扎的問題。有一條學習曲線,或者課程,但是時間會花費很多。

+0

CanCan看起來不錯,但它不太適合我在這裏之後。我以這種方式組織模型的原因是因爲我必須這樣做。地區,學校,教師,房間和學生的層面對於我需要處理的數據至關重要,用戶模型必須能夠「附加」到任何級別(至少在課堂上) 編輯:後想:無論如何,我想知道是否有可能僞造ActiveRecord集合。 – harbogast 2011-01-11 00:46:07

相關問題