2011-04-20 16 views
5

Rails 3'te, bir denetleyicideki xml'den ActiveRecord nesnesini, kendisini açıkça ayrıştırmak için kod yazmadan bir yol üretmenin bir yolu var mı? Örneğin ki, bir kontrolör alabilirXml'i Rails 3'teki ActiveRecord Nesnesine dönüştürmek için yerleşik yol?

<user> 
<first_name>Bob</first_name> 
<last_name>Smith</last_name> 
</user> 

gibi XML ve User.new benzer uygun bir kullanıcı nesne üretmek var (parametreler [: kullanıcı])? Bu bir API için.

cevap

6

Evet, bunu şöyle yapabilirsiniz:

@user = User.new 
@user.from_xml(xml_data) 

Güncelleme

böyle bir şey yapabilirsiniz geçersiz kılma üzerinde:

#user.rb 
def from_xml(xml_data) 
    book = Book.new 
    book.from_xml(extract_xml_from(xml_data)) 
    self.books << book 
    super(xml_data) 
    save 
    book.save 
end 

unutmayın en önemli hat olduğunu super(xml_data), from_xml(xml_data)'unnumaralı telefonunun aranmasına özen gösterecektir.model. Böylece geri kalanını istediğiniz gibi özelleştirebilirsiniz, ancak orijinal işlevselliği de elde etmek istiyorsanız, bu satır ne yazık ki. Bir şey açık değilse bana bildirin.

+0

Çok güzel desteklemeye çalışıyor olacak. Xml iç içe geçmiş ilişkilendirmeler içeriyorsa, bir sorun var gibi görünüyor. İç içe geçmiş bir " Camelot için" Kitap beklenen, ancak Hash var "hatası alıyorum. – salmonthefish

+0

İç içe geçmiş ilişkilerle çalışmak için 'from_xml' yöntemini geçersiz kılmaya çalışabilirsiniz. – dombesz

+0

Yani kitaplar, kullanıcılar * ve * kitaplar için mi, ne? – Eric

2

Çok fazla kod yazmanıza gerek kalmadan size yardımcı olabilecek bir xml_active gemini yarattım. Bunu https://rubygems.org/gems/xml_active adresinden kontrol edebilirsiniz.

dernekler sadece bunu birlikte aşağıdaki tek bir nesne oluşturmak için almak için:

book = Book.one_from_xml xml_data 

Ayrıca dernek ile birlikte xml birçok nesneleri oluşturmak için xml_active alabilirsiniz. Daha fazla özellik var ama muhtemelen bu cevap kapsamında değil. Onları geminin ana sayfasında kontrol edebilirsiniz.

GÜNCELLEME

xml_active artık resmen kaldırılmıştır ve geliştirme şimdi odaklanmış data_active üzerinde (https://github.com/michael-harrison/data_active bakınız) xml_active işlevselliğini olan fakat gelecek sürümlerde diğer biçimleri

+0

Güzel gem, referans için teşekkürler. – Jurgen

İlgili konular