2016-10-14 12 views
2

私は、オプションの一対一の関係を持つ2つのオブジェクトAとBを私のRailsモデルに持っています。 Aは0または1 Bを持つことができます。ほとんどの場合、Aは0 Bを持ちます。レール内の2つのモデルオブジェクト間のオプションの関係

また、Aと他のオブジェクトX、Y、Zとの間に他のそのような関係を導入することもできます。

これらが1対1の関係であるとすれば、AとBとの間にはhas-a関係があります。しかし、これはオプションでまれな関係であり、Aとの後に他のそのような関係が導入される可能性があることを考えると、新しい関係ごとに新しい列を追加することは疑わしいようです。

この関係をよりよくモデル化するにはどうすればよいですか?この特定のケースでは、AとBの間の相関テーブルを使用する方がよいでしょうか?

答えて

0

モデルAのIDを他のすべてのモデルに追加し、モデルAはそれぞれに対してhas_oneを追加します。

各他のは、私がAに新しい列b_idを追加して提示溶液で行くとモデルA

0

をbelong_toでしょう。エルス

あなたはa_idb_idの両方を保持し、その後Cを通じてAアクセスBを持っている第3のモデルのCを作成することができます。

# Pluralization is off here. Remember to pluralize has_many 
class A < ActiveRecord::Base 
    has_many :c 
    has_many :b, through: :c 
end 

class B < ActiveRecord::Base 
    has_many :c 
    has_many :a, through: :c 
end 

class C < ActiveRecord::Base 
    belongs_to :a 
    belongs_to :b 
end 

これにより、データベース内のNULL値が無効になります。これは、関係の周りに何かを構築するときに私が最も頻繁に使用する解決策です。関係の詳細を保存する場所があるので、これが最も役に立ちます。

Cの多型を作成して、Aのみならずすべてのモデルを保存することもできます。 http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

関連する問題