扩展数组而不在Rails 4中创建新类

时间:2015-08-29 10:57:34

标签: ruby-on-rails arrays ruby-on-rails-4

我正在使用API​​并接收哈希数组。让我们说:

array = client.getObjects(123) //where 123 is some collection of object ID

我想在数组中添加一些其他属性,以便稍后在我的视图中使用,例如:

<%= array.getRequestor %> // return a string

最简单的方法是什么?我正在考虑创建一个扩展数组的新类,但我想知道我可以更轻松地添加一个字符串“requestor”属性吗?

由于

2 个答案:

答案 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 %>

与示例代码中一样。