2010-05-10 19 views
5

He estado buscando en Google por un tiempo para tratar de convertir y la solicitud XML entrante en un objeto de registro activo. Intenté usar el método ActiveRecordObject.new.from_xml, pero parece que no maneja las relaciones.rieles xml al objeto de registro activo

Por ejemplo, decir que tengo el siguiente código XML:

<blog> 
    <title></title> 
    <blog-pages> 
    <blog-page> 
     <page-number></page-number> 
     <content></content> 
    </blog-page> 
    </blog-pages> 
</blog> 

y tengo las siguientes objetos del modelo:

class Blog < ActiveRecord::Base 
    has_many :blog_pages 

end 

class BlogPage < ActiveRecord::Base 
    belongs_to :blog 

end 

¿Hay una manera de convertir el XML en un objeto de blog con relaciones ? ¿O necesito analizar manualmente el XML?

Gracias de antemano.

Respuesta

1

Me golpeé la cabeza contra esto durante un tiempo. Parece que no hay mucho por ahí para asignar XML a objetos ActiveRecord sin hacerlo manualmente. Si bien mis necesidades eran similares a las suyas, necesitaba también no solo hacer un objeto con relaciones, sino que tenía que hacer muchas. Busqué en muchos lugares y no pude encontrar nada. Decidí resolverlo pero me di cuenta de que no iba a ser un trazador de líneas, así que escribí una gema que extendió ActiveRecord. I basada en la obra de Wayne Robinson:

http://www.wayne-robinson.com/journal/2006/5/1/ruby-on-rails-activerecordbuild_from_xml-function.html

Después de un par de meses en mi loro no en tiempo libre me terminado mi joya y se puede comprobar a cabo en RubyGems: https://rubygems.org/gems/xml_active

Espero que esto ayude:) Cheers,

Michael

ACTUALIZACIÓN

xml_active ha sido oficialmente retirado y el desarrollo ahora está enfocado en data_active (ver https://github.com/michael-harrison/data_active) que tiene la funcionalidad de xml_active pero en futuras versiones estaré trabajando para soportar otros formatos

+0

Solo uno rápido ... ¿Qué hiciste para expandir el trabajo por wayne? – baash05

+0

@daveatflow, xml_active (ahora data_active) se basó en el trabajo de Wayne para introspectar las dependencias del modelo y luego crear memoria de objetos. La gema es el siguiente paso para comprometer los nuevos objetos a la base de datos. También proporciona soporte para has_one asociaciones donde el trabajo de Wayne solo maneja asociaciones de has_many. En resumen, su trabajo me inspiró a construir la joya para no solo rascar mi propio picor, sino también ayudar a otros. Pensé que era lógico que le diera las felicitaciones;) –

Cuestiones relacionadas