何が本当にこれをやってからあなたを妨げるものはないことに注意すべきである:
class Media < ActiveRecord::Base
belongs_to :question
belongs_to :answer
end
しかし、このアプローチの最大の欠点は、あなたのメディアのテーブルに使用すると、2つのNULL可能外部キー列を持っていなければならないということです - question_id
およびanswer_id
。
メディアを別のクラスにアタッチする場合は、もう1つのNULL可能な外部キー列をメディア表に追加する必要があります。
この問題を解決するために、Railsは多様な関連付けを使用しています。それらを使用すると、メディアは他の多くのモデルに属することができます。
だから今、あなたの質問に@Seanヒルの答えのようにあなたの関連をモデル化することができます:mediable_id
(いくつかの整数)とmediable_type
:
class Media < ActiveRecord::Base
belongs_to :mediable, :polymorphic => true
end
class Question < ActiveRecord::Base
has_many :media, :as => :mediable
end
# etc.
あなたのメディアテーブルには、列のちょうど1組とポリモーフィックな関連を表すことになり(「質問」または「回答」)。
はあなたにも、関連する移行に列を追加する必要があることを忘れないでください(CreateMediaマイグレーション - 必要に応じて調整する):
t.integer :mediable_id
t.string :mediable_type
あるいは、より簡単に、ただ一つの列で:
t.references :mediable, :polymorphic => true
偉大な答えはなく、インライン化の例では、私が思う、次のGoogle社員のために、それが容易になり、両方。 – idbentley