2016-06-22 10 views
0

現在、スポーツプロフィールをモデル化しようとしています。各選手は、それぞれのスポーツごとに異なるプロファイルを持ち、それぞれのスポーツの独自性についてそのドキュメントに参加しています。たとえば、プレーヤーのBob。 BobにはBasketballProfileとSoccerProfileがあります。 AliceはBaseballProfileとSoccerProfileを持つことができます。異なるDB列を持つ類似モデルの継承




Profiles


batting_hand、pitching_hand、shooting_hand、ダンク、ほんの数例では、私が追加したいだろうと属性です。

私はSingle Table Inheritance and Polymorphic Associationを調べましたが、データベースに存在するnullの数のために追加の属性を持つモデルではないようです。

class Player< ActiveRecord::Base 
    has_and_belongs_to_many :Profiles 
end 

class Profile< ActiveRecord::Base 
    belongs_to :Player 
end 

class BasketballProfile < Profile 
end 

class BaseballProfile < Profile 
end 

どのように似ていますが、それは追加のデータベース列を持つモデルをモデル化するのでしょうか? DB列を追加して同様のモデルを継承できますか? BasketballProfileとBaseballProfileはどちらもポジションを持っていますが、一方はbatting_handを持ち、もう一方はダンクを持っています。

は、私はあなたのクラスのためにDBの行の空のフィールドを持つ気にしない場合を除き、助けにはなりませんだけではBaseballProfile、SoccerProfile、BasketballProfileなど

答えて

0

だから、STIの異なるスタンドアローンモデルを作る必要があることをドンそれらを使用しないでください。

他のアプローチは、プロファイルにすべての共通フィールドがあり、より多彩なSportSpecificProfile(より良い名前がないため)が1つあり、これはBasketballProfile、BaseballProfileでもかまいませんが、テーブルなどを共有しません。

+0

私はもともと同じテーブルに入れようと計画していました。あなたは、多形性の関連を逆転させるでしょうか? https://gist.github.com/runemadsen/1242485 –

+1

ええ、私はそれを多形性の関連と呼んでいると思います。あなたはテーブル上に空のフィールドを持たずに、同じテーブルにそれらを置くことはできません。しかし、それらを持つことはあなた次第です。そのようにすれば、欠点を知ることができます。 – Leito

関連する問題