1

acts_as_foo構文**ではなく、ActiveSensor::Base < ActiveRecord::Baseこの基本クラスを拡張してから、すべてのエラー/検証/クラス メソッド/奇抜な機能を使用して拡張するというアイデアをいじっています。

提案: #active_sensor.rb gem

module ActiveSensor
  include ActiveRecord

  autoload :VERSION, 'active_sensor/version'
  autoload :ActiveSensorError, 'active_sensor/base'
  autoload :Base, 'active_sensor/base'
  autoload :Validations, 'active_sensor/validations'
end

長所:見た目がすっきりしたと思います。アーキテクチャとクラスのビルドアップは ActiveRecord をエミュレートする たくさんのサブクラス化が進行中です... コンポーネントが:is_a?メソッドを使用してハードウェアであるかどうかを確認したい。

短所: 追加の継承クラス レイヤーをメモリに保持する... 独立して使用されることはなく、あまり一般的ではありません (これを行う他の Rails プラグインは 1 つしか見られません)。

何かアドバイス?新しい ::Base クラスを作成するのはばかげていますか? もしそうなら、なぜですか?

** acts_as_fooRails gem で共通のパターンです。このクラス メソッドはすべての AR オブジェクトに追加され、クラスのロード時にクラスおよびインスタンス メソッドをロードおよび拡張します。

4

1 に答える 1

0

あなたはすでに自分自身に答えたと思います。簡単に言うと、Base を拡張すると、システム内のすべての Active Record クラスに機能が追加されますが、acts_as_foo を使用すると、それを必要とするモデルにのみ追加できます。

明らかにこれから、一部のモデルの機能のみが必要な場合はacts_as_fooを使用することをお勧めします...しかし、すべてのモデルで機能が必要な場合は、自由にBaseを拡張してください.

于 2010-08-31T13:59:14.700 に答える