0

クエリから返された配列を拡張して、新しいメソッドを追加したいと思います。

モデルクエリがあり、いくつかの計算された属性size_x、size_y...があると仮定します。

私のコントローラーでは、いくつかのクエリを取得します

@queries = Query.limit(10).all

これで、@queriesは配列になります。2つのメソッドで配列を拡張したい

@queries.average_size_x

@queries.average_size_y

グローバルArrayクラスに追加せずに、これら2つのメソッドで返される配列を拡張する優れたソリューションを探しています。それを行う方法はありますか?

これが私が試したいくつかのことです:

  • self.findメソッドの再定義

これは、クエリを古い構文に変更した場合にのみ機能します

Query.find(:all, :limit => 5)
  • 関係を拡張する

    Query.limit(10).extending(QueryAggregator)

allこれは、オブジェクトがActiveRecordリレーションであるためにメソッドを呼び出さない場合に機能しますが、一度all呼び出されると、メソッドaverage_size_xは使用できません。

私が見る唯一のオプションは、配列クラスを拡張してそこにメソッドを追加することですが、他のモデルには関係がない可能性があります...

助言がありますか ?

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 に答える