1

Rails アプリケーションで Web サービスの応答をオブジェクトに変換しようとしていますが、次の 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クラスに変換しようとしましたが、属性メソッドは複雑なタイプ、文字列、整数eなどのみを受け入れません...

userType (Web サービス応答) を 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" メソッドを自動的に作成するためです。呼び出された属性メソッドがハッシュ値に対応する場合、ActiveResource は自動生成された class のインスタンスを返します。これはそれぞれおよびメソッドMyResource::UserTypeに応答します。このインスタンスを取得するには、オーバーライドされたメソッド内で呼び出し、 および の値を独自のクラスに渡します。userTypeIddescriptionsuperuserTypeIddescription

編集: - クラス名を修正

PS:属性ゲッター メソッドの生成方法の詳細については、 ActiveResource#loadメソッドを参照してください。

于 2013-03-12T00:19:44.467 に答える