我在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
这可能吗?我该如何建立关联?
答案 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"