2009-05-05 13 views
13

ActiveRecord, varsayılan JSON çıkış biçiminde bir değişiklik yaptı. Bu Ruby'nin ActiveResource ile JSON biçimlendirmesini nasıl kullanırız?

{ some_junk } 

ActiveResource görünüşe göre ben

yayan bir sığınakta web hizmeti tüketmek umutsuzca çalışıyorum

{ some_junk } 

olarak JSON tüketmek bekliyor, onları takip etmiştir

için

{ "user": { some_junk } } 

gitti

{ "user": { some_junk } } 

ActiveResource :: Base sınıfıma bunu yapmanın bir yolu var mı? İşte benim kodum.

class User < ActiveResource::Base 
    self.site = "http://example.com/" 
    self.format = :json 
end 

Güncelleme: şimdilik kırık gibi ActiveResource geçiyordum, birisi yanıtı bilmiyorsa; onun veri formatları gelince bu arada, ben

require 'httparty' # sudo gem install httparty 
result = HTTParty.get('http://foo.com/bar.json', headers => { "Foo" => "Bar"}) 
# result is a hash created from the JSON -- sweet! 

cevap

9

Evet aracılığıyla istediği GET elde etmeyi başardı, ActiveResource şu anda biraz esnek değildir. Prensip olarak

, fikri kendine özel bir biçim modülü yazabilirsiniz (örneğin JsonWithRootFormat), ActiveResource::Formats::JsonFormat modül dayalı ve sonra belirttiğiniz Modelinizdeki sizin biçimi olarak: Ancak

self.format = :json_with_root 

, ActiveResource::Base çok format-agnostic değil - şu anda XmlFormat kullanıp kullanmadığınızı görmek için does a check ve sadece kök düğümünü geçiyorsunuz.

Böylece, kendi biçim modülünüz olan ve maymun yamalarını ActiveResource::Base yapıp istediğinizi elde edebilirsiniz, ancak bu neredeyse hiç de zor değildir. Yine de, Base'u biraz daha format-agnostik yapmak için bir yamaya memnuniyetle karşılanacağına eminim.

0

Burada, kendi özel ActiveResource Formatter'ınızı nasıl yazacağınızı açıklayan iyi bir blog yazısı olan @vaskas. ActiveResource Koleksiyonları

http://vaskas.me/blog/2012/02/07/using-hashes-as-activeresource-collections/

+0

site kapalı ama onun üzerinde github görevini izlenen (https://github.com/vaskas/vaskas.me/blob/master/blog/ olarak

kullanma Hash'ler 2012/02/07/use-hashes-as-activeresource-collections/index.html) - kendi format nesnesini 'self.format' olarak atayabilirsiniz. Yeni bir sınıf oluşturun, 'ActiveResource :: Formats :: JsonFormat'ı dahil edin ve kendi' decode' işlevinizi tanımlayın. – phillmv

İlgili konular