現在、私のレールアプリには、異なる製品であるいくつかのクラスがあります。
例えば一例です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
私の個々の製品モデルに、次にservices モデルに
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です。