На моем приложении у меня есть несколько вещей с вложениями на них, с помощью скрепки.
На данный момент каждая из моих Моделей имеет свои собственные "поля скрепки" (Клиент has_attached_file) или has_many модели, которые имеют прикрепленные файлы (has_many StorePictures хранилища, продукт has_many ProductPictures)
Мой клиент также сказал мне, что в будущем мы могли бы прикреплять больше вложений к системе (т.е. документы PDF для клиентов для загрузки).
Мое приложение имеет довольно сложную систему авторизации, реализованную с declarative_authorization. Нельзя, например, загрузить изображения с продукта, который ему не разрешают 'видеть'.
Я рассматриваю рефакторинг моего кода, таким образом, у меня может быть универсальная модель "Attachment". Таким образом, любая модель может has_many :attachments
.
С этим контекстом это походит на хорошую идею? Или я должен продолжить делать Foos и FooPictures?
Я Обнаружено, что часто бывают случаи, когда универсальным классом вложений намного проще управлять, чем независимыми вложениями в различных других типах записей. Единственным недостатком простого подхода с вложениями является то, что эскизы, которые необходимо создать, определяются для всех возможных вложений одновременно, а не для каждого конкретного случая.
Гибридный подход, обеспечивающий большую гибкость, заключается в создании таблицы Attachment на основе STI путем включения столбца «тип» и создания подклассов, специфичных для использования, таких как ProductAttachment, которые определяют конкретные стили.