Mysql rails中两个模型对象之间的可选关系

Mysql rails中两个模型对象之间的可选关系,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,我的Rails模型中有两个对象A和B,它们具有可选的一对一关系。例如,A可以有0个或1个B。在大多数情况下,A有0个B 此外,以后还可以在A和其他对象X、Y、Z之间引入其他此类关系 考虑到这些是一对一的关系,a和B之间的关系是有意义的。但考虑到它是一个可选的、不经常出现的关系,而且以后还可以使用A引入其他此类关系,因此为每个新关系添加一个新列似乎是有问题的 如何更好地模拟这种关系?在这种特殊情况下,在a和B之间使用关联表是否更有意义?您可以将模型a的id添加到所有其他模型中,模型a将为每个模型都

我的Rails模型中有两个对象A和B,它们具有可选的一对一关系。例如,A可以有0个或1个B。在大多数情况下,A有0个B

此外,以后还可以在A和其他对象X、Y、Z之间引入其他此类关系

考虑到这些是一对一的关系,a和B之间的关系是有意义的。但考虑到它是一个可选的、不经常出现的关系,而且以后还可以使用A引入其他此类关系,因此为每个新关系添加一个新列似乎是有问题的


如何更好地模拟这种关系?在这种特殊情况下,在a和B之间使用关联表是否更有意义?

您可以将模型a的id添加到所有其他模型中,模型a将为每个模型都添加一个id


每个人都属于A型

我将采用所提出的解决方案,即向A型添加一个新的列
b\U id

否则,您可以创建第三个模型C,它同时保存
a_id
b_id
,然后通过
C
访问
a

# 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
#这里不允许多元化。记住多元化有很多
A类
这将防止数据库中出现任何空值。这是我在围绕关系构建某些东西时最常用的解决方案,因为现在您有了一个位置来存储有关关系的更多信息

您还可以使C多态,以便它可以存储任何模型(而不仅仅是A)