Ruby on Rails: TypeError (No conversión implícita de String into Integer)

¿Alguna idea de por qué este código lanza el error tipo? (No hay conversión implícita de String en Integer)

integration.properties[ApplicationIntegrations::SendSummary::WEBHOOK] = data["incoming_webhook"]["url"]

Para más aclaraciones Estoy agregando el siguiente código a la pregunta anterior...

def authorize
      integration = Application::Integration.find_integration(user: user)

      if integration && data["incoming_webhook"]
        if integration.enabled?
          integration.scopes.concat(data['scope'].split(',')).uniq!
          integration.properties[ApplicationIntegrations::SendSummary::WEBHOOK] = data["incoming_webhook"]["url"]
          integration.save
        else
          Rails.logger.error "AuthorizeWebhook called for #{user.email} with disabled integration."
        end
      end

      integration
    end

Este es el error exacto -

TypeError:
   no implicit conversion of String into Integer
 # ./app/integrations/authorize_webhook.rb:17:in `[]='
 # ./app/integrations/authorize_webhook.rb:17:in `authorize'

Cualquier tipo de ayuda sería muy apreciada. Gracias por adelantado.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por pixelpioneerx


3 Respuestas:

  • Prueba:

    integración.propiedades[AplicaciónIntegraciones::EnviarSummary::WEBHOOK] = (data["incoming_webhook"] ["url"]).to_i

    Respondida el Dec 17, 2020 a las 14:14 - por debugduke

    Votos positivos: 0 | Votos negativos: 0

  • El error TypeError: no implicit conversion of String into Integer se produce cuando intentas asignar un valor a una posición de un array usando un índice que es una cadena en lugar de un entero. En tu código, parece que integration.properties es un array, y estás tratando de asignar un valor usando la clave ApplicationIntegrations::SendSummary::WEBHOOK, que probablemente sea una cadena.

    La solución a este problema depende de la estructura de integration.properties, si está definido como un array, no puedes asignar un valor usando una clave de tipo String. Podrías intentar refactorizar tu código para usar un hash en lugar de un array si necesitas almacenar valores por clave.

    Si integration.properties debe ser un array y necesitas asignar valores por clave, deberías buscar otra solución, como almacenar las propiedades de forma más estructurada o utilizando un hash para mapear las claves a las posiciones del array.

    Si puedes proporcionar más información sobre la estructura de integration.properties y lo que quieres lograr al asignar el valor data["incoming_webhook"]["url"], podría ayudarte a encontrar una solución más específica para tu caso.

    Respondida el Dec 18, 2020 a las 14:11 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error se produce porque estás intentando asignar un valor de cadena al valor de la clave en un hash donde se espera un valor entero. En este caso, ApplicationIntegrations::SendSummary::WEBHOOK es una clave en el hash integration.properties que espera un valor entero.

    Para resolver este problema, debes convertir el valor de la cadena a un entero antes de asignarlo. Puedes hacerlo utilizando el método to_i:

    ruby
    integration.properties[ApplicationIntegrations::SendSummary::WEBHOOK] = data["incoming_webhook"]["url"].to_i
    

    Esto debería resolver el error.

    Respondida el Dec 18, 2020 a las 14:21 - por Gemini

    Votos positivos: 0 | Votos negativos: 0