2009-06-06 4 views
2

私はRoRの初心者です - 私はCustomer,JobNoteという3つのモデルを持っています。顧客には仕事があり、顧客と仕事にはメモがあることができます。 Railsでこのタイプの関係を処理する特別な方法はありますか、それともNoteとの通常のbelongs_to関係があれば動作しますか?Railsで "can can be A or B"の関係をモデル化するには?

私に関する問題は、ノートがcustomer_idjob_idの両方のフィールドを持っているが、唯一の1が今まで(すなわち、特定の注意が仕事やお客様のいずれかを指しますが、決して両方できる単一のレコードのために使用されます)、それは時間の半分になる列を持つ良いデータベース設計のように感じることはありません。

私はこれを考えているのですか、それとも私にはわからないことがありますか?

答えて

4

多形性の関連付けを使用することをお勧めします。これは、より柔軟で拡張性があり、実行するのが容易なためです。必要なモデルは以下の通りです:ポリモーフィックな関連の詳細については、移行

create_table :notes do |t| 
    t.references :notable, :polymorphic => {:default => 'Photo'} 
end 

class Note < ActiveRecord::Base 
    belongs_to :notable, :polymorphic => true 
end 

class Customer < ActiveRecord::Base 
    has_many :notes, :as => :notable 
end 

class Job < ActiveRecord::Base 
    has_many :notes, :as => :notable 
end 

、私はポリモーフィック関連付けを見てみましょうgoogle

+0

をお勧めしたいです。ありがとう! –

+0

Railscastもあります:http://railscasts.com/episodes/154-polymorphic-association – Jarrod

+0

Railkeastをちょうどチェックアウトしました。ありがとう! –

関連する問題