Own reference association "twin" has_one

I am in Rails 3.2.2 and I have a Variant class:

class Variant < ActiveRecord::Base has_one :twin_variant end 

I would like to link two objects from this class to become "twins". I would like to create:

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

Then I would like to have a method for creating a double option:

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

Then two objects must be connected to each other, so that:

 v1.twin_variant => v2 v2.twin_variant => v1 

Is it possible? How do I create an association?

+6
source share
1 answer

Given the following model

 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 

You can set up circular relationships with

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

and you can check it with

 Variant.where(name: "Variant #2").first.twin_variant.name # "Variant #1" Variant.where(name: "Variant #1").first.twin_variant.name # "Variant #2" 
+13
source

All Articles