我有一個Contributor
模型和一個Resource
模型。在一個簡單的世界裏,我會有以下設置:兩個has_many_through關係到相同模型
class Resource
has_many :authorships
has_many :contributors, through: :authorships
end
class Contributor
has_many :authorships
has_many :resources, through: :authorships
end
但是,我的要求已經改變。貢獻者現在可以是資源的編輯者或資源的作者。 A 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
這是最明智的做法,還是有另一種方法,我失蹤?
Rails多態協會支持第一種情況,但我認爲第一個問題是您需要/想要支持同時是作者和編輯者的「Contributor」嗎? –
「編輯」和「作者」都是相同的。它們在各個方面都可以互換。我不想子類化並建立多態關係,因爲這感覺不對。在我看來,Join更清楚地描述了這種關係。由於相同的數據既可以作爲作者也可以作爲編輯,我最終也會有很多重複。 – Undistraction
我的問題是,一個人是否可以成爲一名編輯,並且是同一個資源的作者。 –