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

相关问题