Rails 模型中的 webpacker

Rails webpacker in model

有点奇怪的情况,但让我解释一下。我有一个需要输出多辆汽车的观点。汽车照片存储在 Amazon S3 上。有些车有照片,有些则没有。那些不需要的,需要他们的图像来显示本地存储的占位符图形。汽车模型有一个布尔字段来表示是否有汽车的照片。

部分汽车部分如下:

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

我的Car模型中的方法是这样的:

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 只需使用选项从 Amazon S3 中获取正确的 URL 即可完美运行。

我苦苦挣扎的地方是如何显示占位符图像。占位符存储在 /app/javascript/images.

有什么建议吗?

非常感谢, 尼尔

Any suggestions?

是的。不要在模型中这样做。 Rails 中的模型已经疯狂地承担了过多的责任。这实际上纯粹是一个视图问题。如果可能的话,模型真的应该只关注业务逻辑而不是表示。

那去哪儿呢?

辅助方法或 decorator:

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 中并使用约定而不是反对它们。