2009-05-05 32 views
13

ActiveRecord đã giới thiệu một thay đổi đối với định dạng đầu ra JSON mặc định của nó. Nó đã đi từCách sử dụng định dạng JSON với ActiveResource của Ruby?

{ "user": { some_junk } } 

để

{ some_junk } 

ActiveResource dường như đã theo đuổi thắng của mình, hy vọng tiêu thụ JSON như

{ some_junk } 

tôi đang cố gắng một cách tuyệt vọng để tiêu thụ một dịch vụ web RESTful mà phát ra

{ "user": { some_junk } } 

Có cách nào để yêu cầu lớp ActiveResource :: Base của tôi làm như vậy không? Đây là mã của tôi.

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

Cập nhật: Tôi từ bỏ ActiveResource như bị phá vỡ cho bây giờ, trừ khi ai đó biết câu trả lời; trong thời gian chờ đợi, tôi có thể đạt được GET mà tôi muốn qua

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! 

Trả lời

9

Vâng, ActiveResource hiện không linh hoạt khi nói đến định dạng dữ liệu của nó.

Về nguyên tắc, ý tưởng là bạn có thể viết cho mình một mô-đun định dạng tùy chỉnh (ví dụ JsonWithRootFormat), dựa trên các mô-đun ActiveResource::Formats::JsonFormat, và sau đó xác định đó là định dạng của bạn trong mô hình của bạn:

self.format = :json_with_root 

Tuy nhiên, ActiveResource::Base không phải là định dạng bất khả tri - hiện tại là does a check để xem bạn có đang sử dụng XmlFormat hay không và chỉ chuyển nút gốc thông qua nếu bạn đang sử dụng.

Vì vậy, bạn có thể có được những gì bạn muốn bằng cách tạo mô-đun định dạng của riêng bạn, monkey-patching ActiveResource::Base, nhưng nó hầu như không lý tưởng. Tôi chắc chắn một bản vá để làm cho Base một chút định dạng bất khả tri hơn sẽ được hoan nghênh, mặc dù.

0

Đây là bài đăng trên blog tốt bằng cách @vaskas giải thích cách viết Trình định dạng ActiveResource tùy chỉnh của riêng bạn.

Sử dụng Hashes như ActiveResource Collections

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

+0

Các trang web là xuống nhưng tôi theo dõi các bài đăng trên github của mình (https://github.com/vaskas/vaskas.me/blob/master/blog/ 2012/02/07/using-hashes-as-activeresource-collections/index.html) - ý chính của nó là bạn có thể gán đối tượng định dạng của riêng bạn cho 'self.format'. Tạo một lớp mới, 'include ActiveResource :: Formats :: JsonFormat' và định nghĩa hàm' decode' của riêng bạn. – phillmv

Các vấn đề liên quan