2017-01-24 14 views
0

私はDomainというモデルとKnowledge and Exerciseという2つのモデルがあるプロジェクトに問題があります。 ドメインは知識と演習の共通の属性と関連を維持します。それを超えて、知識と演習では自分の属性と関連を保持します。 ドメインはナレッジまたはエクササイズになります。継承Rubyコントローラ

私がモデルと移行後、間のフォロー関係を作成したい:

class Domain < ApplicationRecord 
    has_one :knowledge 
    has_one :exercise 
end 

class Knowledge < ApplicationRecord 
    belongs_to :domain 
end 

class Exercise < ApplicationRecord 
    belongs_to :domain 
end 

それは今のために働いていますが、これは正しいアプローチであれば、私は知らない、と私は手順がわかりません前にそれぞれのドメインを作成しなければならないので、知識と演習のためのコントローラメソッドを作成する必要があります。

正しいアプローチを表示したり、これを見つけるために何を検索すればよいか教えてください。

ありがとうございました!

+0

STIの使用を検討することもできます。 – max

答えて

1

知識や運動をすることができ声明Aドメインに準拠していませんDomainで同時にKnowledgeExerciseためhas_one関係を有します。

この状況をよりよく処理するために多態性の関係を作成することをお勧めします。

class Domain < ApplicationRecord 
    belongs_to :implementation, polymorphic: true 
end 

class Knowledge < ApplicationRecord 
    has_one :domain, as: 'implementation' 
end 

class Exercise < ApplicationRecord 
    has_one :domain, as: 'implementation' 
end 

この方法では、domainは、唯一の実装(knowledge、またはexerciseのいずれかを持つことができ、より良いあなたのニーズにお応えします。もちろん、あなたが好きなようにimplementationの名前を変更することができます。

・ホープ、この

関連する問題