6

我在 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

这可能吗?我应该如何建立协会?

4

1 回答 1

14

给定以下模型

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"
于 2012-12-14T11:30:52.660 回答