2009-06-27 61 views
2

哇瘋狂的標題!但這是問題。在努力乾燥我的學校網站管理系統應用程序時,我已經將我的應用程序(FileSet)模塊放在一個位置,並將其放置在一個位置。以前FileSet用於通用網站系統,也用於兒童學習區域系統。除了一個細微差別之外,他們的表現完全一樣。在兒童區域,FileSet文件分爲啓動和正常兩類。啓動文件是教師製作的文件,普通文件是孩子們製作的文件。現在在一般的網站應用程序中,這個區別是不相關的,因此被忽略。這是艱難的部分。我想在這兩種情況下使用相同的控制器和視圖。在運行時,我知道一個文件集屬於一般站點,或屬於這個學習區域,所以我可以說,如果它在學習區域上下文中,我想限制FileSet.find(x).files只使用'正常'命名範圍。如果上下文是普通網站,那麼我們根本就不會使用命名範圍。根據運行時環境約束查找條件

我簡化了上面的信息,但基本上問題是,如何調用FileSet.find(x).files並使文件方法足夠聰明以縮小基於運行時上下文返回的結果?

我已經探索了關聯擴展了一下,但似乎沒有做這項工作。我希望這裏存在一些東西。我試圖拼命地在模型中保留這個邏輯,而沒有關注它的視圖或控制器。默認範圍將工作一種享受,如果他們在運行時:)

期待一些建議:)

乾杯評估,

布蘭頓

回答

2

你可以使用一個名爲範圍以一個PROC是確定當前上下文並返回適當的條件? 像這樣的文件:

named_scope :for_context, :conditions => lambda { 
    if only_normal? 
    { :type => 'normal' } 
    elsif only_startup? 
    { :type => 'normal' } 
    else 
    {} 
    end 
} 

,那麼你可以撥打:

FileSet.find(x).files.for_context 
+0

感謝亞瑟,那很可能必須的方式。我剛剛意識到我還需要根據控制器條件進行過濾(無論用戶是否在管理員區域),因此我必須調用範圍並通過當前上下文:)感謝您的建議: ) – 2009-06-28 09:43:31