2015-01-08 2 views
6

私は紙にまとめた一連のモデルを実装しようとしていましたが、複数テーブル継承の設定を使用するのが最善の方法だと思った問題が発生しました。しかし、Googleの検索後、ActiveRecordはMTIをサポートしていないことが判明しました。私のモデルが正しく実装されていれば、これを正しく設定していたのかどうかは分かりませんでした。だから私の質問は、Active RecordがMTIのサポートを組み込んだのはなぜですか?あなたが私のモデルセットアップが見えるようになっていることに興味があるなら、私はそれを下に置いておきます。RailsのActiveRecordが複数テーブルの継承をサポートしていないのはなぜですか?

class Player < ActiveRecord::Base; end 
class CollegePlayer < Player; end 
class ProPlayer < Player; end 

ここで、プレーヤーは、CollegePlayerとProPlayerのいずれかまたは両方になります。 "人は" UserPlayer、および/またはCoachされたり、別の例では...

class Person < ActiveRecord::Base; end 
class User < Person; end 
class Player < Person; end 
class Coach < Person; end 

+1

私は、"大学のプレーヤー "のようなものをプレイヤーのように見ている傾向があります。実現する)ことができます。同様に、あなたが人を抱えている場合、その人の固有の特性ではなく、「プレーヤー」と「コーチ」が役割です。私はあなたのモデルのセットアップがあまりにも文字通り "is a"概念を取ると思う。 –

+0

@muistooshortあなたはおそらく正しいです、私はちょうどそれを追加情報として提供していました。私は主にアクティブレコードに複数表継承のサポートがない理由を尋ねています。 – daveomcd

答えて

1

あなたの質問に対するこの短い答えは、ActiveRecordのコアチームがこの機能をコミュニティの需要に足りないものにすることを望まないためです。あなたが決定的な答えをしたい場合、彼らはアクティブなレコードプロジェクトの「主要な」要因であるとして、あなたがDHH(david.heinemeierhansson.com)やアーロン・テンダーラブ・パターソン([email protected])を依頼する必要がありますhttps://github.com/rails/rails/issues/5541

を見ます。

私の個人的な答えは、アクティブなレコードがすでに十分複雑なためです。すでにサポートしている機能をActiveRecordがサポートするために行われるメタプログラミングの量は、維持して拡張するのが難しいです。現在ARに取り組んでいるコアチームは、ARをさらに最適化してより速く作業し、組織をクリーンアップするためにリファクタリングすることに重点を置いています。継承のような複数のテーブルを取得するための選択肢が既に存在することを考えれば、コミュニティはこの機能の優先度をあまり高くはないと訴えているわけではありません。

DB組織の正しさについてのあなたの他の質問にコメントしますが、私はmuistooshortに同意します。あなたが役割で欲しいものを達成できるようです。私が最初にC++から来たとき、私はさまざまなオブジェクトのために別々のモデルを作ろうとしましたが、何らかの複雑な継承スキームを遵守する強い必要性を感じました。 (この時点では推測されていないので)、これらのタイプの違いによって、この程度の差別化を正当化する行動の違いです。私はActive Recordの上で動作し、複数のテーブル継承は彼の応答だったサポートされなかった理由を、私は彼に尋ねたThoughtbotのショーン・グリフィンと話し

EDIT

ポリモーフィック関連がいっぱいほとんどのユースケースでのその役割 "

+0

こんにちは!私はあなたの答えに応じて新しいスレッドを開始しましたhttp://stackoverflow.com/questions/40073707/polymorphic-associations-can-be-used-for-mti-implementation多分、あなたは何かを言うことがある – okliv

+0

私はそれをチェックアウトします –

関連する問題