我在我的应用程序中有团体(Group
模型),代表人群。 我希望每个组都有自己的论坛。Forem宝石:如何将论坛链接到其他模型
我应该只是在groups
表中的论坛ID?它感觉不对。如果我自己做了,论坛将会与一个“可成形”元素(在这种情况下的团体,但我有其他需要论坛的模型)具有多态关联。
对我应该怎么做的任何意见?修改gem以适应我的需求,或者只需要我的模型中的forum_id需要论坛?或者其他解决方案可能?
我在我的应用程序中有团体(Group
模型),代表人群。 我希望每个组都有自己的论坛。Forem宝石:如何将论坛链接到其他模型
我应该只是在groups
表中的论坛ID?它感觉不对。如果我自己做了,论坛将会与一个“可成形”元素(在这种情况下的团体,但我有其他需要论坛的模型)具有多态关联。
对我应该怎么做的任何意见?修改gem以适应我的需求,或者只需要我的模型中的forum_id需要论坛?或者其他解决方案可能?
我是创立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用来确定一个人是否可以访问论坛。这种方法将要做的是它只会返回该用户的具有特定论坛链接的组。如果有的话,那么就知道用户可以访问该论坛。
现在,如果你要去的地方的一组可以访问很多论坛的另一条路线,那么,你最好定义groups
和forem_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!
感谢您的全面解答!我的小组更像是聚会小组,而不是一般论坛用来管理权限的小组。所以基本上,我需要在团体和论坛之间建立一对一的关系。一个小组将有一个论坛,以便他们可以聊什么。所以我想我应该选择第一个解决方案。但是,拥有一个“belongs_to”论坛似乎很奇怪。 – Robin 2011-12-19 22:42:24