两个has_many_through关系到同一模型

时间:2013-09-26 18:43:30

标签: ruby-on-rails ruby-on-rails-3 join model has-many-through

我有一个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。所以我似乎有两种方法来处理这个要求:

  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
    
  3. 哪种方法最明智,还是我缺少另一种方法?

1 个答案:

答案 0 :(得分:1)

鉴于您的澄清,我会使用第一种方法,但不是仅为is_editor引入Authorship布尔值,您可能希望概括语言和概念,而是使用{{1带有ResourceContributorship字段的字段现在可以是contributor_type:author,但可以在将来扩展。