0

我有一个Contributor模型和一个Resource模型。在一个简单的世界中,我将进行以下设置:

class Resource

   has_many :authorships
   has_many :contributors, through: :authorships

end

class Contributor

   has_many :authorships
   has_many :resources, through: :authorships

end

但是,我的要求发生了变化。贡献者现在可以是资源的编辑者或资源的作者。AContributor可以是Editor一种资源的一种,也可以是Author另一种资源的一种。所以看来我有两种方法来处理这个要求:

  1. 为我的连接模型添加某种is_editor?属性Authorships并有效地注释每个关系。

  2. 创建第二个连接模型 - 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
    

哪个是最明智的方法,还是我缺少另一种方法?

4

1 回答 1

1

鉴于您的澄清,我将使用第一种方法,但您可能想要概括语言和概念,而不是仅仅引入is_editor布尔值,而是使用现在可以是or的字段,但可以在未来。AuthorshipResourceContributorshipcontributor_type:author:editor

于 2013-09-26T19:19:18.053 回答