1

我有兩個模型,用戶和主題,我目前正在加入一個HABTM關聯在一個themes_users表中。基本上,在用戶創建新主題後,其他用戶可以選擇自己的用途。兩個不同類型的關聯在同一個兩個表中的軌道

但是,只有主題的原始創作者才能編輯它。所以,我需要一些其他類型的關聯來處理這種關係,例如主題中的created_by_id字段。

通過這種方式,用戶模型扮演兩種不同的角色:他們可以是主題的實現者和/或主題的所有者。實現者關係由themes_users連接表處理;問題是:處理這種二級關聯的正確方法是什麼?我是否需要讓用戶變爲多態,然後使created_by_id引用成爲「所有者」?還是有一些更容易?

非常感謝您的幫助!

+0

我看到,用戶可以創建多個主題,但可以一個創建的themes用戶每次「使用」多個?或者在使用時是用戶目前的主題? – house9 2010-06-11 22:00:51

+0

是的,這就是爲什麼它是一個HABTM協會。用戶可以創建多個主題並使用多個主題:將主題模型想象爲文檔;因此,您可以爲很多不同的用戶提供大量文檔,但每個文檔只有一個創建者/編輯者。 – tmo256 2010-06-11 22:04:11

回答

1

我相信你應該添加下列協會

class User < ApplicationController 
    # a user can create many themes 
    has_many :themes_created, :foreign_key => :creator_id, :class_name => "Theme" 
end 

class Theme < ApplicationController 
    # add a creator_id column in your themes table 
    belongs_to :creator, :class_name => "User" 
end 

這樣你就可以得到所有被一些@user通過

@user.themes_created 
+0

問題是,由於已經通過themes_users存在的HABTM關聯,用戶模型上已經有了「has_many:themes」和「user.themes」。 – tmo256 2010-06-11 22:05:56

+0

只需使用其他名稱即可。看我的編輯。 – 2010-06-11 22:35:01

+0

但是你仍然不能使用「user.themes」......它和用戶類一樣簡單嗎?就像用戶「has_many:mythemes,:class_name =>'Theme'」並通過「user.mythemes」調用一樣?我似乎不應該這樣工作...... – tmo256 2010-06-11 22:40:13

相關問題