Zippie が提供したものと、コメントであなたが尋ねたことに従って、少し修正したバージョンを提供します。
これをフレーズに分解してから、Ruby クラスと関連付けに分解します。
- チームには多くのプレイヤーがいます
- チームには多くのチーム属性があります
- プレーヤーには多くの属性があります
これにより、アプリケーションの一部が簡素化される可能性があります。検証などのためのチーム モデル自体。名前、体重、高さなど、一般的な属性と動的な属性を決定する必要があります。これは、すべてのプレーヤーがそれらを持っているため、Player
モデル内ではなくモデル内にある可能性があるためAttribute
です。
したがって、次のようなものを使用できます。
class Team < ActiveRecord::Base
has_many :players
has_many :attributes, :as => :attributable
end
class Player < ActiveRecord::Base
belongs_to :team
has_many :attributes, :as => :attributable
attr_accessible :name, :weight, :height
end
class Attribute < ActiveRecord::Base
belongs_to :attributable, :polymorphic => true
attr_accessible :name, :value
end
あなたの他の質問として
基本的に、属性のテーブルが 1 つ、プレーヤーのテーブルが 1 つ、チームのテーブルが 1 つになります。フットボールのチームと選手 (フットボール = サッカー?) を作成するのは次のようになります (すでにチームを作成しているとしましょう):
player = Player.new
player.name = 'Lionel Messi'
player.attributes << Attribute.create!(:name => :playing_position, :value => :second_striker)
@team.players << player
@team.attributes << Attribute.create!(:name => :uefa_cups, :value => 4)
移行は次のようになります (Rails ガイドから直接取得 - マイナーな変更を加えたもの):
class CreateAttributes < ActiveRecord::Migration
def change
create_table :attributes do |t|
t.string :name
t.string :value
t.references :attributable, :polymorphic => true
t.timestamps
end
end
end