Rails Webpacker в модели - PullRequest
       9

Rails Webpacker в модели

0 голосов
/ 05 апреля 2020

Немного странный сценарий, но позвольте мне объяснить. У меня есть мнение, что необходимо вывести ряд автомобилей. Фотографии автомобилей хранятся на Amazon S3. Некоторые автомобили имеют фотографии, а другие нет. Для тех, кому это не нужно, требуется их изображение для отображения локально сохраненного графического заполнителя c. Модель Car имеет логическое поле, чтобы указать, есть ли фотография для автомобиля.

Часть автомобиля выглядит следующим образом:

<div class="car__photo-inner">
    <img src="<%= car.photo_or_placeholder_url({size: :thumb, aspect: :square}) %>" />
</div>

Метод в моей машине Модель такова:

def photo_or_placeholder_url(options = {})
  if photo
    photo_url(options)
  else
    asset_pack_path File.join(["media", "images", "placeholder.jpg"])
  end
end

photo_url просто использует параметры для получения правильного URL из Amazon S3 и работает отлично.

Я борюсь с получением изображения-заполнителя для отобразить. Заполнитель хранится в /app/javascript/images.

Есть предложения?

Большое спасибо, Нил

1 Ответ

1 голос
/ 05 апреля 2020

Есть предложения?

Да. Не делайте этого в модели. Модели в Rails уже безумно перегружены обязанностями. И это на самом деле чисто предметное беспокойство. На самом деле модели должны касаться только бизнес-логики c, а не представления, если это возможно.

Так где же тогда?

Вспомогательный метод или декоратор :

module CarsHelper
  def car_photo(car, **options)
    url = if car.photo 
      car.photo_url(options)
    else
      "placeholder.jpg"
    end
    image_tag(url)
  end
end

<div class="car__photo-inner">
  <%= car_photo(car) %>
</div>

Если изображение-заполнитель является проблемой разработчика, просто поместите его в app/assets/images и используйте соглашения вместо борьбы с ними.

...