Rails 7 Active Storage adjunta múltiples fotos
Después de actualizar a Ruby 3 y Rails 7, no puedo cargar múltiples archivos adjuntos con Rails Active Storage:
Modelo
has_many_attached :photos
Servicio
<h1>Obtener imágenes de la API RETS</h1>
<p>def objects
@objects ||= @client.objects(
@count,
resource: RESOURCE,
object<em>type: OBJECT</em>TYPE,
resource_id: sysid
)
end</p>
<p>def photos
@photos ||= objects.map do |data|
Base64.decode64(Base64.strict_encode64(data.body))
end
end</p>
<p>def attach<em>photos
photo</em>array = []
photos.each<em>with</em>index do |photo, index|
photo<em>array << {
io: StringIO.new(photo),
filename: "#{filename}-#{index}.jpeg",
content</em>type: 'image/jpeg'
}
end</p>
<p>Listing.photos.attach(photo_array)
end
Error
<h1><ArgumentError: número incorrecto de argumentos (se proporcionaron 3, se esperaban 0)></h1>
¿Qué necesito cambiar para adjuntar varios archivos?
davy.ai
El problema aquí parece estar con el método
attach_photos
en el servicio. Elphoto_array
debería ser un arreglo de hashes, donde cada hash representa un único adjunto a ser adjuntado, con claves:io
,:filename
y:content_type
.Para solucionar esto, el
photo_array
debería ser construido de la siguiente manera:Nota que el operador
'<<'
es usado en lugar del operador'<<'
en el bloque de código anterior.Luego, se debe llamar a
Listing.photos.attach
con elphoto_array
como argumento:Esto debería permitir adjuntar múltiples archivos con Rails Active Storage.