【发布时间】:2016-07-21 08:03:47
【问题描述】:
我是红宝石新手。我正在从 ruby 客户端调用 REST api,该 API 返回一个模型。模型包含嵌套的复杂对象,平均最多 4 级。可以说,模型是 Customer,我在我的 ruby 客户端应用程序中创建了一个类 Customer。想象一下:
外部类:
class Customer
def CustomerCards=(address) #inner complex object
@address = address
end
#... other complex objects
end
内部类CustomerCard
class CustomerCard
def CardDetails=(carddetails) #inner-inner complex object
@carddetails= carddetails
end
#... other complex objects
end
inner->内部类CardDetails
class CardDetails
def Cardvalidations=(cardvalidations) #inner-inner-inner complex object
@cardvalidations = cardvalidations
end
#... other complex objects
end
inner->inner->内部类CardValidations
class Cardvalidations
def MaxTranxLimit=(maxTranxLimit ) #inner-inner-inner complex object
@maxTranxLimit= maxTranxLimit
end
#... other complex objects
end
在这种情况下,我必须手动JSON.parse 每个属性(返回哈希),并将其转换为相应的对象,最多 n 级。这似乎不是一个有效的解决方案。 (想象一下,我在Customer 模型中有大约 8 个复杂属性,而且每个属性的模型还包含另外 8 个复杂属性)
问题:有没有通用的方法来做到这一点?
我了解,我们无法在 ruby 类中定义属性类型,但由于我是 Ruby 新手,所以我一定遗漏了一些东西。并且必须有一些解决方案,因为 REST 调用非常普遍。
【问题讨论】:
-
我们可以看到一个哈希来的例子吗?我相信人们可能会以与在哈希中调用对象相同的方式调用对象并使用元编程技术实例化它们(基本上它在类 Java 语言中称为“反射”。)
-
@mudasobwa,确切地说,你听起来像我要找的东西。这是我得到的哈希:
{"AddressId"=>"0", "AddressLine1"=>nil, "AddressLine2"=>nil, "City"=>nil, "CountryName"=>nil, "SubDivision"=>nil, "State"=>nil, "ZipCode"=>nil} -
Ehh...我没有看到类名和哈希中的键之间有任何关联。
-
@mudasobwa,我也观察到了同样的情况。这似乎不可能。
-
@mudasobwa 顺便说一句,如果我看到大多数外部模型的哈希,似乎有一点可能性,因为内部模型以 propertyname 开头:
{"CreditCardDetail"=>{"CardholderName"=>"ZEESHAN MUSTAFA", "CVV"=>nil },"OtherComplexProp"=>{"xyz"=>"123", ...这里CreditCardDetails是一个复杂的属性外部模型。但是,它似乎会变得一团糟,因为我必须更改属性名称和东西,才能利用反射技术。