我正在使用API并接收哈希数组。让我们说:
array = client.getObjects(123) //where 123 is some collection of object ID
我想在数组中添加一些其他属性,以便稍后在我的视图中使用,例如:
<%= array.getRequestor %> // return a string
最简单的方法是什么?我正在考虑创建一个扩展数组的新类,但我想知道我可以更轻松地添加一个字符串“requestor”属性吗?
由于
答案 0 :(得分:1)
扩展核心类通常不是一个好主意,尤其是当您要添加的其他职责特定于您的功能域时。
6个月后,有人(也许是你自己)会尝试调试代码并想知道为什么Array
会公开一个随机的自定义方法。
最好明确定义自定义视图对象,可能使用Struct
,例如:
# my_view_object.rb
class MyViewObject < Struct.new(:hash)
def getRequestor
# manipulate / return specific hash data
end
end
# controller
@view_obj = MyViewObject.new(client.getObjects(123))
# view
@view_obj.hash # original hash
@view_obj.getRequestor # your custom attribute
请注意Struct
的意图是表示自定义数据结构,而不是行为。如果您的自定义方法需要执行不相关的工作,您可能希望使用PORO(普通旧Ruby对象)。
答案 1 :(得分:0)
我说扩展数组听起来像个坏主意。我建议你用你自己的哈希包装数组。例如
my_hash = {getRequestor: ?, array: array}
然后像
一样使用它<%= my_hash.getRequestor %>
与示例代码中一样。