В CMS сайта, который я создаю, я использую Paperclip для обработки загрузок файлов. Пользователи могут загружать изображения и должны давать каждому изображению краткое описание, которое затем используется для обозначения изображения (для SEO) и для тега alt. Каждое изображение изменяется на несколько предопределенных размеров и сохраняется на S3.Сохранение изображений как моделей в рельсах
Пользователь может использовать это изображение в нескольких местах, эффективно создавая несколько разных типов моделей, каждый из которых относится к определенному изображению.
Поэтому, учитывая, что мне нужно хранить метаданные об изображении (его описание), и мне нужно поделиться одним изображением между несколькими моделями, кажется, имеет смысл инкапсулировать изображение в собственную модель, которая может затем добавляться как ассоциация на любые модели, которые в ней нуждаются. Модель Image
имеет прикрепленный файл Paperclip. Это означает, что мне не нужно хранить дублируемую информацию на любых моделях, относящихся к изображению.
Моя забота о производительности. Вместо того, чтобы удалять URL-адрес непосредственно в качестве атрибута, любые запросы изображений теперь должны проходить через модель Image
.
Является ли это разумным решением или я должен подходить к этому по-другому?
Что вы подразумеваете под прямым URL? Если вы используете paperclip, то вы всегда будете обращаться к ссылке через модель, например. '@ user.avatar.url' – claptimes
@claptimes Насколько я знаю, приложение Paperclip не является моделью и не сохраняется в базе данных. Проверьте какие-либо миграции/схемы в проекте, который использует программу «Скрепка», и вы не найдете отдельную модель. Это временный класс, созданный при создании экземпляра модели. Хранение происходит на модели Paperclipped, поэтому, когда я говорю «прямо», я имею в виду прямое попадание атрибута модели вместо того, чтобы идти глубже; к другой модели. – Undistraction
Так вы говорите '@ item.image.url' vs' @ item.image_url'? – claptimes