【问题标题】:Forem gem: how to link a forum to other modelsForem gem:如何将论坛链接到其他模型
【发布时间】:2011-12-19 21:44:43
【问题描述】:

我的应用中有组(Group 模型),它们代表人群。 我希望每个小组都有自己的论坛。

我应该只在groups 表中提供论坛ID 吗?感觉不对。如果我自己做,论坛将与“论坛”元素(在这种情况下为组,但我有其他需要论坛的模型)建立多态关联。

对我应该做什么有什么意见吗?修改 gem 以满足我的需要,或者只在需要论坛的模型中使用 forum_id?或者其他解决方案?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 model gem


    【解决方案1】:

    我是创建 Forem 的人(不过,是志愿者做了大部分的努力!),我想我可以回答这个问题。

    如果您只希望某些组可以访问一个且只有一个论坛,那么您可以将forum_id 字段放在groups 表上并这样做。然后,您可以做的是覆盖 User 模型中的 can_read_forem_forum? 方法以对该用户执行权限检查:

    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!

    【讨论】:

    • 感谢您的全面回答!我的群组更像是聚会群组,而不是论坛通常用来管理权限的群组。所以基本上,我需要群组和论坛之间的一对一关系。一组将有一个论坛,这样他们就可以随便聊聊。所以我想我应该采用第一个解决方案。但是有一个“belongs_to”论坛似乎很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2012-02-21
    • 2020-07-08
    • 2014-07-13
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多