Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

195
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!