0

我想扩展从查询返回的数组以添加新方法。

假设我有一个模型查询,它有一些计算属性 size_x, size_y ...

在我的控制器中,我检索了一些查询

@queries = Query.limit(10).all

现在@queries 变成了一个数组。我想用 2 种方法扩展数组

@queries.average_size_x

@queries.average_size_y

我正在寻找一种简洁的解决方案,可以增强使用这两种方法返回的 Array 而无需将其添加到全局 Array 类中。有什么办法吗?

以下是我尝试过的一些事情:

  • 重新定义 self.find 方法

这仅在我将查询更改为旧语法时才有效

Query.find(:all, :limit => 5)
  • 扩展关系

    Query.limit(10).extending(QueryAggregator)

如果我不调用该all方法,因为该对象是 ActiveRecord 关系,但一旦all被调用,则该方法average_size_x不可用。

我看到的唯一选择是扩展 Array 类并在那里添加方法,但它可能与其他模型无关......

有什么建议么 ?

4

1 回答 1

1

这应该有效。您有一个代理实例并按模块扩展。

query = Query.limit(10).all

module SomeModule
  def average_size_x
  end

  def average_size_y
  end
end

query.extend(SomeModule)

query.average_size_y
query.average_size_y
于 2013-01-19T17:23:55.400 回答