現在、私のレールアプリには、異なる製品であるいくつかのクラスがあります。
例えば一例ですCircuits
。
私がやりたいことは、という名前の新しいクラスを作成し、Service
すべての個々の製品モデルをそれから継承させることです。
以前の私のcircuit.rb
モデルは
class Circuit < ActiveRecord::Base
でも今は
class Circuit < Service
そして、新しい `Services1 クラスを作成しました。単純に:
class Service < ActiveRecord::Base
end
私circuit_controller.rb
にはいくつかの機能がありますが、最も簡単なのはlist
def list
conditions = []
conditions = ["organisation_id = ?", params[:id]] if params[:id]
@circuits = Circuit.paginate(:all, :page => params[:page], :conditions => conditions, :per_page => 40)
end
circuit
しかし、モデルを継承するように変更するservices
と、回路リストビューが空になり、予期していませんでした。
私のservices
テーブルには、製品のタイプを保存するためのフィールドが含まれていtype
ますが、現時点ではテーブルは空です。
マルチテーブル継承は最善の方法ですか? アプリは非常に大きいので、この変更を実装するために多くのコードをリファクタリングする必要はありません。
単一テーブルの継承は絶対にダメなので、何らかの関連付けの方が良いのではないかと思っています。
アップデート
このブログ投稿に従ってみました:
http://rhnh.net/2010/08/15/class-table-inheritance-and-eager-loading
だから私は追加しました
belongs_to :service
私の個々の製品モデルに、次にservice
s モデルに
SUBCLASSES = [:circuit, :domain]
SUBCLASSES.each do |class_name|
has_one class_name
end
end
次に、service_controller.rb
def list
@services = Service.all(:include => Service::SUBCLASSES)
end
最後に、リスト ビューで変数を調べてデバッグしようとしました@services
が、クエリが空のservices
テーブルで実行さcircuits
れているため空domains
です。