複数のテーブルから計算された値のみを保持するモデルを作成したいと考えています。
これはすでに質問されていますが、指定されたソリューションは Rails 2 でのみ機能します。このソリューションは、基本的に Ryan Bates がテーブルレス モデルで行ったものと同じです。( Railscast #193 )
残念ながら、これは別のアプローチがあるRails 3では機能しません( Railscast #219 )。(IMHOこれらのモデルはデータベースレスモデルと呼ばれるべきです)
私の最初のアイデアは、ActiveModel アプローチを使用して新しいクラスを作成することでした。純粋な Arel を使用して自分でデータベース機能を実装しようとしましActiveRecord::Base.connection
たが、これは非常に面倒であることが判明したため、現在は単に別のモデルを誤用しています。
CompletlyUnrelatedModel.select(['SUM(...) AS sum1', 'SUM(...) AS sum2', ...])...
しかし、これにはいくつかの欠点があります。私にとっての最大の問題は、返される属性が常にString
オブジェクトであることです (Rails はデータベース スキーマを参照して列の型を判断できないため)。また、特定のモデルのインスタンスにまったく関係のないデータが含まれているのも好きではありません。