自我指称“双胞胎”有一个联想

时间:2012-12-14 10:53:02

标签: ruby-on-rails associations

我在Rails 3.2.2中,我有一个Variant类:

class Variant < ActiveRecord::Base

   has_one :twin_variant

end

我希望能够将这个类中的两个对象关联成“双胞胎”。 我想创建:

v1 = Variant.new
v1.name = "Fantastic variant"
v1.save

然后我想有一种创建双变体的方法:

v2 = Variant.new
v2.name = "Fantastic variant twin"
v2.save

v1.twin_variant = v2

然后两个对象应该相互关联,以便:

v1.twin_variant
=> v2

v2.twin_variant
=> v1

这可能吗?我该如何建立关联?

1 个答案:

答案 0 :(得分:13)

给出以下模型

class Variant < ActiveRecord::Base
  attr_accessible :name, :variant_id

  has_one :twin_variant, class_name: "Variant", foreign_key: :variant_id
  belongs_to :twin, class_name: "Variant", foreign_key: :variant_id
end

您可以使用

设置循环关系
v1 = Variant.create(name: "Variant #1")
v2 = Variant.create(name: "Variant #2")

v1.twin_variant = v2
v2.twin_variant = v1

您可以使用

进行检查
Variant.where(name: "Variant #2").first.twin_variant.name # "Variant #1"
Variant.where(name: "Variant #1").first.twin_variant.name # "Variant #2"