rails + paperclip: хорошая модель "Attachment" - это хорошая идея? - PullRequest
7 голосов
/ 29 апреля 2010

В моем приложении есть несколько вещей с вложениями, используя скрепку .

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

На данный момент каждая из моих Моделей имеет свои собственные «поля скрепок» (Client has_attached_file) или модели has_many, к которым прикреплены файлы (Store has_many StorePictures, Product has_many ProductPictures)

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

В моем приложении довольно сложная система авторизации, реализованная с помощью Declarative_authorization . Например, нельзя загружать изображения из продукта, который ему запрещено «видеть».

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

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

1 Ответ

5 голосов
/ 29 апреля 2010

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

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

...