我正在尝试将Web服务响应转换为我的Rails应用程序中的对象,我收到以下json:
{
"id": 1,
"status": true,
"password": "123",
"userType": {
"description": "description",
"userTypeId": 1
},
"email": "abc@gmail.com"
}
我想在UserType Ruby类中转换userType属性,如下所示:
class UserType
attr_accessor :userTypeId, :description
end
我正在使用ActiveResource与webservice进行通信,我尝试使用attribute方法将userType json属性转换为UserType类,但属性方法不接受复杂类型,只接受字符串,整数e等... < / p>
如何将userType(webservice响应)转换为UserType Ruby Class?
Rails 3.2.12和Ruby 1.9.3p194
答案 0 :(得分:1)
您应该能够将userType
实现为实例方法。
class MyResource < ActiveResource::Base
self.site = "http://api.example.com/"
def userType
UserType.new(userTypeId: super.userTypeId, description: super.description)
end
end
这是有效的,因为ActiveResource会自动创建一个&#34; getter&#34;您传递给类构造函数的属性哈希中每个键的方法。当被调用的属性方法对应于哈希值时,ActiveResource返回自动生成的类MyResource::UserType
的实例,它们将分别响应userTypeId
和description
方法。您可以通过在重写方法中调用super
并将userTypeId
和description
的值传递给您自己的类来获取此实例。
修改强> - 更正了班级名称
PS:有关如何生成属性getter方法的更多详细信息,请查看ActiveResource#load方法。