При нарушении Закона Demeter при наличии
int price = customer.getOrder().getPrice();
, решение не состоит в том, чтобы создать getOrderPrice () и преобразовать код в
int price = customer.getOrderPrice();
, но вместо этого отметить, что это запах кода , и внесите соответствующие изменения что, надо надеяться, оба сцепления увеличения и более низкая связь. К сожалению, нет никакого простого рефакторинга здесь, который всегда применяется, но необходимо, вероятно, подать заявку , говорят, не спрашивают
Ознакомьтесь с этим примером приложения
Думаю, это именно то, что вам нужно.
HTH
PS: хранение изображений в базе данных обычно плохая идея, я уверен, что вы можете использовать скрепку с S3 / cloudfront ( как указано в ответах ниже)
Heroku рекомендует хранить загружаемые файлы на s3, а предоставляет инструкции о том, как это сделать для нескольких файловых плагинов Rails.
Переосмыслите, что вы делаете. Хранить изображения в БД - плохая идея. Для получения дополнительной информации см. здесь .
Правильно, чтобы указать вам на S3. Если ничего другого, подумайте о стоимости: 500 МБ пространства базы данных на Heroku - это 50 долларов в месяц. На S3 это будет 15 центов.
Изображение из S3 обрабатывается медленно. Задержки от 0,5 до 2 с являются обычными, что означает, что его следует использовать только для медиаресурсов.