направляющие + скрепка: действительно ли универсальная модель “Attachment” является хорошей идеей?

На моем приложении у меня есть несколько вещей с вложениями на них, с помощью скрепки.

  • У клиентов есть один логотип.
  • Хранилища могут иметь одно или несколько изображений. Эти изображения, кроме того, могут иметь другую информацию, такую как дата, в которой они были взяты.
  • Продукты могут иметь одно или несколько изображений их, категоризированный (от шрифта, от спины, и т.д.).

На данный момент каждая из моих Моделей имеет свои собственные "поля скрепки" (Клиент has_attached_file) или has_many модели, которые имеют прикрепленные файлы (has_many StorePictures хранилища, продукт has_many ProductPictures)

Мой клиент также сказал мне, что в будущем мы могли бы прикреплять больше вложений к системе (т.е. документы PDF для клиентов для загрузки).

Мое приложение имеет довольно сложную систему авторизации, реализованную с declarative_authorization. Нельзя, например, загрузить изображения с продукта, который ему не разрешают 'видеть'.

Я рассматриваю рефакторинг моего кода, таким образом, у меня может быть универсальная модель "Attachment". Таким образом, любая модель может has_many :attachments.

С этим контекстом это походит на хорошую идею? Или я должен продолжить делать Foos и FooPictures?

7
задан kikito 29 April 2010 в 15:10
поделиться

1 ответ

Я Обнаружено, что часто бывают случаи, когда универсальным классом вложений намного проще управлять, чем независимыми вложениями в различных других типах записей. Единственным недостатком простого подхода с вложениями является то, что эскизы, которые необходимо создать, определяются для всех возможных вложений одновременно, а не для каждого конкретного случая.

Гибридный подход, обеспечивающий большую гибкость, заключается в создании таблицы Attachment на основе STI путем включения столбца «тип» и создания подклассов, специфичных для использования, таких как ProductAttachment, которые определяют конкретные стили.

5
ответ дан 7 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: