2011-12-19 22 views
2

我在我的應用程序中有團體(Group模型),代表人羣。 我希望每個組都有自己的論壇。Forem寶石:如何將論壇鏈接到其他模型

我應該只是在groups表中的論壇ID?它感覺不對。如果我自己做了,論壇將會與一個「可成形」元素(在這種情況下的團體,但我有其他需要論壇的模型)具有多態關聯。

對我應該怎麼做的任何意見?修改gem以適應我的需求,或者只需要我的模型中的forum_id需要論壇?或者其他解決方案可能?

回答

3

我是創立Forem的人(儘管他做了大部分努力的志願者),我想我可以回答這個問題。

如果您只想要某些組訪問一個論壇,並且只能訪問一個論壇,那麼您可以將forum_id字段放在groups表中,並以此方式進行。你可以做的,然後是覆蓋can_read_forem_forum?方法在User模型爲用戶進行權限檢查:

def can_read_forem_forum?(forum) 
    groups.where(:forum_id => forum.id).any? 
end 

這在Forem's ability model用來確定一個人是否可以訪問論壇。這種方法將要做的是它只會返回該用戶的具有特定論壇鏈接的組。如果有的話,那麼就知道用戶可以訪問該論壇。

現在,如果你要去的地方的一組可以訪問很多論壇的另一條路線,那麼,你最好定義groupsforem_forums(稱爲forum_groups)之間的連接表,並在您的Group模型把它定義爲一個關聯像這樣:

has_many :forum_groups 
has_many :forums, :through => :forum_groups, :class_name => "Forem::Forum" 

你會還需要定義你的應用程序中的新模式這個forum_groups協會,它會被稱爲ForumGroup去有點像這樣:

class ForumGroup < ActiveRecord::Base 
    belongs_to :forum, :class_name => "Forem::Forum" 
    belongs_to :group 
end 

我們這樣做,所以您可以輕鬆管理論壇和組之間的關聯。如果你做了has_and_belongs_to_many,當你想從連接表中刪除一條特定的記錄時,它通常只會在屁股中提供巨大的痛苦。現在

,與均能成立,要在User模型中定義的方法是這樣的一個:

def can_read_forem_forum?(forum) 
    groups.joins(:forums).where("forem_forums.id = ?", forum.id).any? 
end 

同樣的事情,只不過這次我們發現,鏈接到的所有組通過我們之前設立的這個協會的特定論壇。這將在forum_groups表上執行INNER JOIN,然後在forem_forums表上執行另一個,獲取所需的數據。

我希望這可以幫助你,並感謝使用Forem!

+1

感謝您的全面解答!我的小組更像是聚會小組,而不是一般論壇用來管理權限的小組。所以基本上,我需要在團體和論壇之間建立一對一的關係。一個小組將有一個論壇,以便他們可以聊什麼。所以我想我應該選擇第一個解決方案。但是,擁有一個「belongs_to」論壇似乎很奇怪。 – Robin 2011-12-19 22:42:24

相關問題