4

В CMS сайта, который я создаю, я использую Paperclip для обработки загрузок файлов. Пользователи могут загружать изображения и должны давать каждому изображению краткое описание, которое затем используется для обозначения изображения (для SEO) и для тега alt. Каждое изображение изменяется на несколько предопределенных размеров и сохраняется на S3.Сохранение изображений как моделей в рельсах

Пользователь может использовать это изображение в нескольких местах, эффективно создавая несколько разных типов моделей, каждый из которых относится к определенному изображению.

Поэтому, учитывая, что мне нужно хранить метаданные об изображении (его описание), и мне нужно поделиться одним изображением между несколькими моделями, кажется, имеет смысл инкапсулировать изображение в собственную модель, которая может затем добавляться как ассоциация на любые модели, которые в ней нуждаются. Модель Image имеет прикрепленный файл Paperclip. Это означает, что мне не нужно хранить дублируемую информацию на любых моделях, относящихся к изображению.

Моя забота о производительности. Вместо того, чтобы удалять URL-адрес непосредственно в качестве атрибута, любые запросы изображений теперь должны проходить через модель Image.

Является ли это разумным решением или я должен подходить к этому по-другому?

+0

Что вы подразумеваете под прямым URL? Если вы используете paperclip, то вы всегда будете обращаться к ссылке через модель, например. '@ user.avatar.url' – claptimes

+0

@claptimes Насколько я знаю, приложение Paperclip не является моделью и не сохраняется в базе данных. Проверьте какие-либо миграции/схемы в проекте, который использует программу «Скрепка», и вы не найдете отдельную модель. Это временный класс, созданный при создании экземпляра модели. Хранение происходит на модели Paperclipped, поэтому, когда я говорю «прямо», я имею в виду прямое попадание атрибута модели вместо того, чтобы идти глубже; к другой модели. – Undistraction

+0

Так вы говорите '@ item.image.url' vs' @ item.image_url'? – claptimes

ответ

5

Вы думаете об этом в точности. Вы хотите Rails Polymorphic Associations, documented here. На самом деле, изображения используются в примере.

Любая разница в производительности будет незначительной и, вероятно, лучше, чем если бы вы вручную нанесли какое-то другое решение.

Смежные вопросы