我有一个Contributor
模型和一个Resource
模型。在一个简单的世界中,我将进行以下设置:
class Resource
has_many :authorships
has_many :contributors, through: :authorships
end
class Contributor
has_many :authorships
has_many :resources, through: :authorships
end
然而,我的要求已经改变。贡献者现在可以是资源的编辑者或资源的作者。 Contributor
可以是一个资源的Editor
和另一个资源的Author
。所以我似乎有两种方法来处理这个要求:
为我的is_editor?
加入模型添加某种Authorships
属性,并有效地注释每个关系。
创建第二个联接模型 - Editorship
:
class Resource
has_many :authorships
has_many :editorships
has_many :contributors, through: :authorships
has_many :contributors, through: :editorships
end
class Contributor
has_many :authorships
has_many :editorships
has_many :resources, through: :authorships
has_many :resources, through: :editorships
end
哪种方法最明智,还是我缺少另一种方法?
答案 0 :(得分:1)
鉴于您的澄清,我会使用第一种方法,但不是仅为is_editor
引入Authorship
布尔值,您可能希望概括语言和概念,而是使用{{1带有ResourceContributorship
字段的字段现在可以是contributor_type
或:author
,但可以在将来扩展。