我的Rails模型中有两个对象A和B,它们具有可选的一对一关系。比如,A可以有0或1 B.在大多数情况下,A有0 B。
此外,其他此类关系可以在A和其他对象X,Y,Z之后引入。
鉴于这些是一对一的关系,A和B之间的关系是有意义的。但鉴于它是一种可选且不常见的关系,并且其他此类关系可以在后面用A引入,为每个新关系添加一个新列似乎是值得怀疑的。
我如何更好地建立这种关系?在这种特殊情况下,使用A和B之间的相关表是否更有意义?
答案 0 :(得分:0)
您可以将模型A的ID添加到所有其他模型中,模型A将为每个模型添加has_one。
彼此将属于模型A
答案 1 :(得分:0)
我会使用所提供的解决方案,即向b_id
添加新列A
。
否则,您可以创建第三个模型C,其中包含a_id
和b_id
,然后A
访问B
到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
这将阻止数据库中的任何空值。这是我在构建关系时最常使用的解决方案,因为现在您可以存储有关关系的更多信息。
你也可以使C多态,以便它可以存储任何模型(不仅仅是A)。 http://guides.rubyonrails.org/association_basics.html#polymorphic-associations