如何将image_tag与srcset和活动存储版本一起使用?

时间:2019-05-10 18:22:20

标签: ruby-on-rails rails-activestorage srcset

我想将image_tag srcset属性与活动存储变体一起使用

    <%= image_tag(@assoc.photo,
    srcset:[
      [@assoc.photo.variant(resize: "600x600"), "1024w"],
      [@assoc.photo.variant(resize: "800x800"), "1980w"]
      ],
      sizes: "100vw") %>

第一行返回:没有将Symbol隐式转换为Integer。

怎么了?

2 个答案:

答案 0 :(得分:0)

尝试将@assoc.photo.variant(resize: "600x600")包装在url_for中。

作为旁注,我发现了这种srcset风格,您可以在其中定义宽度,而不是面向分辨率的1x,1x方法将在调整窗口大小时导致大量服务器调用。在Rails文档中未发现有关此行为的任何信息。

答案 1 :(得分:0)

我做了一种调整照片大小的方法:

  def photos_variants(photo, width, height)
    variation = ActiveStorage::Variation.new(Uploads.resize_to_fill(width: width, height: height, blob: photo.blob))
    ActiveStorage::Variant.new(photo.blob, variation)
  end

然后我在srcset标记中调用此方法:

<%= image_tag(@assoc.photo,
srcset:[
  [url_for(@assoc.photos_variants(@assoc.photo, 400, 300)), "512w"],
  [url_for(@assoc.photos_variants(@assoc.photo, 600, 450)), "768w"],
  [url_for(@assoc.photos_variants(@assoc.photo, 800, 600)), "1024w"],
  [url_for(@assoc.photos_variants(@assoc.photo, 1200, 900)), "1980w"]
  ],
  sizes: "100vw") %>
相关问题