1

複数のテーブルにまたがる集計関数がいくつかあります。現在、私はクラスの 1 つのクラス メソッドとしてそれらを持っていますが、実際にはクラスに固有のものではなく、複数のクラスにあるため、それらを中央のモジュールまたはクラスに配置したいと考えています。それらをモジュールに入れようと思っていましたが、ActiveRecord::Baseを拡張できません。このようなものですが、global_aggregations のテーブルがないため、これは機能しません。

class GlobalAggregation < ActiveRecord::Base

  def self.say_hello
    puts "say hello"
    sql="select * from locations" # this would join a bunch of tables
    items=self.find_by_sql(sql)
  end
end

ActiveRecord::Base から派生するクラスをセットアップして、他の機能やこれを処理する方法を考えずにクエリ インターフェイスを取得する方法はありますか?

4

1 に答える 1

0

ActiveRecord::Baseから継承するクラスは定義上 AR モデルである必要があるため、 から継承するクラスを作成したくありません。これはすべてのモデルで利用できる機能でActiveRecord::Baseはないため、モンキー パッチも適用したくありません。別のモジュール内からメソッドをBase呼び出すことができます:Base

module GlobalAggregator

  def say_hello
    puts "say hello"
    sql = "select * from locations" # this would join a bunch of tables
    items = ActiveRecord::Base.find_by_sql(sql)
  end

end
于 2013-06-08T10:01:57.447 に答える