Rails Image Conditional 在 Heroku 产品中不起作用

Rails Image Conditional Won't Work in Heroku Production

我不得不重新配置我的上传器。我正在使用 carrierwaveminimagick。所以简而言之,我在最初上传图片时会自动 processed/resized。现在我不想自动处理它们,我保留原始大小并为调整大小的图像创建一个名为 normal 的版本。

现在一些上传的图片会有normal版本。但是在重新配置之前上传的图像不会。为了避免损坏图像,我创建了一个在开发中效果很好的条件。

  <% if car.picture_attachments.first.picture.normal.present? %>
        <%= image_tag(car.picture_attachments.first.picture.normal.url) %>
      <% else %>
        <%= image_tag(car.picture_attachments.first.picture) %>
      <% end %> 

但在 Heroku 中 - 它认为每个对象都有一个 normal 版本,结果提供了一堆损坏的图像。我正在使用 Amazon S3 - 知道为什么会这样吗?

必须使用这个:

<% if car.picture_attachments.first.picture.normal.file.exists? %>

present?exists? 之间的区别很重要。在此处查看差异:

注意 exists?present? 慢得多,因为它会检查每个实例的数据库。