6

私はRails 3.2.2にいて、Variantクラスを持っています:

class Variant < ActiveRecord::Base

   has_one :twin_variant

end

このクラスの 2 つのオブジェクトを関連付けて「双子」にしたいと考えています。作成したい:

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

次に、双子のバリアントを作成する方法が必要です。

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

v1.twin_variant = v2

次に、2 つのオブジェクトが次のように関連付けられる必要があります。

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 に答える