activeadmin carrierwave multiple input: 预览现有图片

activeadmin carrierwave multiple input: preview existing picture

我为 activeadmin 实现了本地 carrierwave 多个上传器。 图像正确保存到数据库。我可以通过这种方式在 FORM 中预览现有图像以进行单一输入:

f.input :background, :as => :file, :hint => image_tag(f.object.background.url(:thumb)`)

但我无法预览 FORM 中的现有图像以进行多输入:

f.input :images, as: :file, input_html: { multiple: true}, :hint => f.object.images.each {|i| image_tag(i.url(:thumb))}

并且它在网络浏览器中不呈现任何内容。但是,如果我将此代码放入 content_tag:

f.input :images, as: :file, input_html: { multiple: true}, :hint => content_tag(:div, f.object.images.each {|i| image_tag(i.url(:thumb))})

它给了我这样的东西:

[#<ProductAdditionalImagesUploader:0x007f5f430339d8 @model=#<Basrelief id: 1,
title: "Барельеф", description: "Барельеф...",
price_m: #<BigDecimal:7f5f42042600,'0.1E4',9(18)>,
created_at: "2016-02-07 22:31:34", updated_at: "2016-02-12 23:42:02",
background: "Bar_8.jpg", images: ["1.jpg", "2.jpg"]>, @mounted_as=:images,
@storage=#<CarrierWave::Storage::File:0x007f5f43033938
@uploader=#<ProductAdditionalImagesUploader:0x007f5f430339d8...

我要注意,在 SHOW 中,我可以这样预览图像:

 row :images do
        ul do
          basrelief.images.each do |image|
            li do
              image_tag image.url(:thumb)
            end
          end
        end
      end

我做错了什么?也许还有其他方法。

给您带来麻烦的不是 multiple: true。这是您尝试将这些图像与 .each 一起输出的方式。使用 .map 然后用 <br>html_safe 加入字符串

改变这个

f.input :images, as: :file, input_html: { multiple: true}, :hint => f.object.images.each {|i| image_tag(i.url(:thumb))}

到这个

hint = f.object.images.map{|i| image_tag(i.url(:thumb)) }.join('<br>').html_safe
f.input :images, as: :file, input_html: { multiple: true}, :hint => hint