Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
Cómo enviar el padre/hijo de Rails al front-end JS para que sea accesible como un objeto anidado

En backend, mi relación de objeto es que un Item tiene has_many Options . Me gustaría poder acceder a todos los atributos del elemento y sus opciones secundarias como un hash en la interfaz:

 items = [ { id: 1, item_attribute_name: item_attribute_value, options: [ {id: 1, option_attribute_name: option_attribute_value}, {id: 2, option_attribute_name: option_attribute_value}, ] }, { id: 2, item_attribute_name: item_attribute_value, options: [] } ]

Estoy enviando datos a través de un objeto json en respuesta a una solicitud de ajax o usando la práctica gema gon . Me di cuenta de que si SOLO estaba interesado en enviar los elementos principales, el formato se realiza automáticamente de tal manera que puedo devolver Item.all y, en la parte delantera, obtener una matriz de elementos con cada elemento como un hash que representa exactamente sus atributos. como yo quiera.

Pero si quiero enviar a los niños, ¿hay una forma estándar de hacerlo? Me doy cuenta de que puedo construir los atributos del niño como se muestra a continuación, pero me pregunto si hay una forma más directa y directa.

Cómo haría que esto funcione construyendo los atributos secundarios:

 items = Item.all items.each do |i| child_attr = {"options" => i.options } i.attributes.merge(child_attr) end

Una respuesta totalmente aceptable, por cierto, es que no hay... una forma automágica de hacer esto sin hacer lo que estoy haciendo ahora, que es convertir cada objeto principal en atributos en el backend y luego unir los atributos secundarios.

Solo hago esta pregunta, francamente, porque sería bueno mantener las relaciones de objetos en el backend para reutilizarlas en otro lugar, si es posible, en lugar de convertir las cosas en un hash.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Creo que la única forma de obtener el resultado esperado es con algunos parches de mono. Por lo tanto, puede usar un serializador, incluir o usar ActiveModel::Serializers::JSON, que se incluye de forma predeterminada en sus modelos.

Por ejemplo, con ActiveModel::Serializers::JSON, puede hacer algo como:

 items = Item.all items.map! do |i| i.serializable_hash(include: { options: {} }) end

Esto se debe a la carga ansiosa de Rails, que evita tener que cargar todos los niños de una asociación (has_many, por ejemplo). Donde le gustaría serializar depende de su caso de uso.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda