У меня есть модель 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», который одновременно является автором и редактором? –
Оба «Редактора» и «Авторы» идентичны. Они взаимозаменяемы во всех отношениях. Я не хочу подкласса и устанавливать полиморфные отношения, поскольку это кажется неправильным. Мне кажется, что «Объединение» описывает отношения гораздо более четко. Я также получаю много дублирования, поскольку одни и те же данные будут представлены как Author, так и Editor. – Undistraction
Вопрос в том, может ли человек быть редактором AND и автором для того же ресурса. –