2013-02-19 2 views
1

MongoMapper에서 associations 플러그인을 사용하여 클래스 간의 다 대일 연결을 만드는 방법이 있습니까? 여기 내 시도입니다. one 방법은 특정 Foo의 ID를 포함하는 단 하나의 Bar 인스턴스를 일대일 관계를 가정 할 수 있기 때문에MongoMapper의 다 대일 연결

class Foo 
    include MongoMapper::Document 
end 

class Bar 
    include MongoMapper::Document 

    key :foo_id, ObjectId 
    one :foo, :in => :foo_id 
end 

이 구현은 작동하지 않습니다.

foo = Foo.new 

bar1 = Bar.new 
bar1.foo = foo 

bar2 = Bar.new 
bar2.foo = foo 

bar1.foo #=> nil :(

나는 그것이 Bar에 대한 지식을 보유해서는 안하기 때문에 Foo 클래스의 one-to-many 연관을 만들려면하지 않을 것입니다.

간단하게 foo_id을 저장하는 것이 가능하지만 Bar#foo 방법이 정말 유용합니다.

답변

1

나는이 문제에 대한 해답을 찾고 있었지만 결정적인 것을 찾을 수 없었다. 내 모델에 수동 결합을 실행하는 메소드를 추가했습니다. 귀하의 예에서 코드는 다음과 같습니다.

class Foo 
    include MongoMapper::Document 
end 

class Bar 
    include MongoMapper::Document 

    key :foo_id, ObjectId 

    def foo 
     Foo.find(foo_id) 
    end 

    def foo=(a_foo) 
     foo_id = a_foo.id 
    end 

    def serializable_hash(options = {}) 
     hash = super(options) 
     hash.merge({'foo' => foo.serializable_hash}) 
    end 

end 

foo = Foo.new 

bar1 = Bar.new 
bar1.foo = foo 

bar2 = Bar.new 
bar2.foo = foo 

bar1.foo # Should return expected value 
+0

더 이상 MongoDB를 사용하지 않지만이 대답은 간단하고 우아한 것은 아니지만 누군가에게 유용 할 수 있습니다. – Vortico