1

我正在尝试将 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 与 web 服务进行通信,我尝试使用属性方法将 userType json 属性转换为 UserType 类,但属性方法不接受复杂类型,只接受字符串、整数等...

如何将 userType(webservice 响应)转换为 UserType Ruby 类?

Rails 3.2.12 和 Ruby 1.9.3p194

4

1 回答 1

2

您应该能够实现userType为实例方法。

class MyResource < ActiveResource::Base
  self.site = "http://api.example.com/"

  def userType
    UserType.new(userTypeId: super.userTypeId, description: super.description) 
  end
end

这是因为 ActiveResource 自动为您传递给类构造函数的属性散列中的每个键创建一个“getter”方法。当被调用的属性方法对应一个hash值时,ActiveResource返回一个自动生成的类的实例MyResource::UserType,分别对方法userTypeIddescription方法进行响应。您可以通过super在被覆盖的方法中调用并将 和 的值传递userTypeIddescription您自己的类来获取此实例。

编辑: - 更正了类名

PS:查看ActiveResource#load方法以获取有关如何生成属性 getter 方法的更多详细信息。

于 2013-03-12T00:19:44.467 回答