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

时间:2016-10-14 07:08:33

标签: mysql ruby-on-rails activerecord

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

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

鉴于这些是一对一的关系,A和B之间的关系是有意义的。但鉴于它是一种可选且不常见的关系,并且其他此类关系可以在后面用A引入,为每个新关系添加一个新列似乎是值得怀疑的。

我如何更好地建立这种关系?在这种特殊情况下,使用A和B之间的相关表是否更有意义?

2 个答案:

答案 0 :(得分:0)

您可以将模型A的ID添加到所有其他模型中,模型A将为每个模型添加has_one。

彼此将属于模型A

答案 1 :(得分:0)

我会使用所提供的解决方案,即向b_id添加新列A

否则,您可以创建第三个模型C,其中包含a_idb_id,然后A访问BC

# 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