次のようなJSONをエクスポートするRails APIがあります
# /customers/1.json
{
"id":1,
"name":"Some name","address":"Street 12-3",
"county":{"id":2,"name":"MyCounty"},
"contracts":[
{"id":2663,"number":"6-2/7 (2011)", "county":{"id":2,"name":"MyCounty"}},
}
クライアント Rails ( 3.2.2 ) には Resource models:Customer
がContract
あり、County
すべてその API に接続されています。をフェッチCustomer.find(1)
すると、元のクラスが既にロードされているかどうかに基づいて、関連するオブジェクトが 2 つの異なるクラスに解析されるようです。
検討:
rails console
c = Customer.find 1
#<Customer:0x0... @attributes={"id"=>1, "county"=>#<County:0x0...>,
"contracts"=>[#<Customer::Contract:0x0...> ....
注:関連クラス名:County
およびCustomer::Contract
コンソールをリロードすると、次のようになります。
reload!
c = Customer.find 1
#<Customer:0x0... @attributes={"id"=>1, "county"=>#<Customer::County:0x0...>,
"contracts"=>[#<Customer::Contract:0x0...> ....
しかし、新しいコンソールを起動し、Rails にクラスをロードさせる前に、次のようにします。
rails console
County.new
Contract.new
c = Customer.find 1
#<Customer:0x0... @attributes={"id"=>1, "county"=>#<Customer::County:0x0...>,
"contracts"=>[#<Contract:0x0...> ....
Railsがこれらを常に同じ方法で解析できるようにする方法はありますか?
編集:コード例:
# app/models/contract.rb
class Contract < ActiveResource::Base
self.site = APP_CONFIG['k2api']
self.format = :json
end
# app/models/customer.rb
class Customer < ActiveResource::Base
self.site = APP_CONFIG['k2api']
self.format = :json
# accessor to ActiveResource response headers
add_response_method :http_response
end
# app/models/county.rb
class County < ActiveResource::Base
self.site = APP_CONFIG['k2api']
self.format = :json
end