在Rails 3.2.12中使用ActiveResource的复杂属性

时间:2013-03-11 23:52:12

标签: ruby-on-rails ruby ruby-on-rails-3 activeresource

我正在尝试将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

1 个答案:

答案 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的实例,它们将分别响应userTypeIddescription方法。您可以通过在重写方法中调用super并将userTypeIddescription的值传递给您自己的类来获取此实例。

修改 - 更正了班级名称

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