2012-01-24 152 views
1

所以我在我的紅寶石以下機型on Rails的設置:用戶課程ActiveRecord的關係IS

課程需要有content_managers和那些content_managers由在用戶模型中的幾個人。

我是一個新手,所以忍受着我。我正在考慮創建一個名爲content_managers的新模型,該模型具有鏈接兩個表的user_id和course_id。對我來說,課程有content_managers是有道理的。但是,從用戶模型來看,用戶擁有content_managers是沒有意義的。其中一些是content_managers。

從這個角度來看,我認爲我錯誤地思考它,需要以與我所設想的方式不同的方式設置ActiveRecord。任何幫助表示讚賞。

謝謝!

回答

0

ActiveRecord中沒有「have」或「are」,只有「has_many」,「has_one」和「belongs_to」。有了這些工具,你應該可以做你想做的。

一個例子:

class Course < ActiveRecord::Base 
    has_many :content_managers 
end 

class ContentManager < ActiveRecord::Base 
    has_many :content_manager_members 
    has_many :users, 
    :through => :content_manager_members, 
    :source => :user 
end 

class ContentManagerMember < ActiveRecord::Base 
    belongs_to :course_manager 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :content_manager_members 
    has_many :content_managers, 
    :through => :content_manager_members 
end 

確保這些指標正確,你應該罰款,儘管從用戶導航到課程將是緩慢的。您可能需要緩存一些內容以便找到所需的性能級別,但這是一個單獨的問題,將在測試期間發現。

每當執行這樣的事情時,一定要加載足夠數量的測試數據,這些數據大約是預期使用水平的10倍,以瞭解天花板的位置。一些結構僅在數據集規模不大的情況下表現得非常好,但在暴露於真實世界的條件下會融化。

+0

非常感謝tadman ....尤其對於測試建議。我正在查看你所概述的實現,我想知道ContentManagerMember的用途是什麼。是否有可能將ContentManager作爲(belongs_to:courses,belongs_to:users)這樣我只需要定義一個模型? – schmudu

+0

由於'belongs_to'需要一個單獨的外鍵字段,所以不可能屬於多個事物。畢竟,'belongs_to:user'意味着存在'user_id'字段。您不能以同樣的方式創建'user_ids'字段。如果我的理解正確,ContentManager充當一組用戶,因此要建立組成員資格,您需要中間連接模型ContentManagerMember來表示用戶與ContentManager組的關係。 – tadman