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

Aug*_*sto 6 ruby-on-rails associations

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

class Variant < ActiveRecord::Base

   has_one :twin_variant

end
Run Code Online (Sandbox Code Playgroud)

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

v1 = Variant.new
v1.name = "Fantastic variant"
v1.save
Run Code Online (Sandbox Code Playgroud)

然后我想有一个创建双变量的方法:

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

v1.twin_variant = v2
Run Code Online (Sandbox Code Playgroud)

然后这两个对象应该相互关联,这样:

v1.twin_variant
=> v2

v2.twin_variant
=> v1
Run Code Online (Sandbox Code Playgroud)

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

dee*_*our 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
Run Code Online (Sandbox Code Playgroud)

您可以设置循环关系

v1 = Variant.create(name: "Variant #1")
v2 = Variant.create(name: "Variant #2")

v1.twin_variant = v2
v2.twin_variant = v1
Run Code Online (Sandbox Code Playgroud)

你可以用它来检查

Variant.where(name: "Variant #2").first.twin_variant.name # "Variant #1"
Variant.where(name: "Variant #1").first.twin_variant.name # "Variant #2"
Run Code Online (Sandbox Code Playgroud)