es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema aquí parece estar con el método attach_photos en el servicio. El photo_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:

    photo_array = []
    photos.each_with_index do |photo, index|
      photo_array << {
        io: StringIO.new(photo),
        filename: "#{filename}-#{index}.jpeg",
        content_type: 'image/jpeg'
      } 
    end
    

    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 el photo_array como argumento:

    Listing.photos.attach(photo_array)
    

    Esto debería permitir adjuntar múltiples archivos con Rails Active Storage.

Comments are closed.