나는 많은 bar를 포함하는 Foo라는 mongoid 모델이 있다고 해봅시다.Mongoid를 사용하는 자체 참조 임베디드 문서
class Foo
...
embeds_many :bar
...
end
class Bar
...
embedded_in :foo
...
end
바를 자기와 연결하는 관계를 만들고 싶습니다. 관계는 항상 동일한 Foo 문서에 포함 된 두 개의 문서와 관련됩니다. 나는 관계를 부를 때 아무것도 돌려받지 않고 이것을 할 수있는 것처럼 보이지 않는다. 나는 discovered_by ID가 나는 전무를 얻을 다음 바 문서에 설정하고 내가 시도 할 다른 바 문서를 가리키는 동안
belongs_to :discovered_by, :class_name => 'Bar'
또한
has_one :discovered_by, :class_name => 'Bar'
시도 (가정 한 첫 번째 푸의 첫 번째 줄은 discovered_by_id 세트)이 항상 ID 세트를 갖는 doucment에도 불구하고 nil을 반환합니다
Foo.first.bars.first.discovered_by
있습니다. 왜 이런 일이 벌어지고 있는지에 대한 생각은? 어떤 도움을 주셔서 감사합니다.
해결 방법을 제안한 것처럼 ID를 저장해야합니다. 이상적이지는 않지만 내 목적을 달성합니다. 임베디드 문서 재검토에 대한 의견은 흥미 롭습니다. 같은 부모 문서에 관련있는 두 개의 문서를 생각하는 일을하는 "몽고 (mongo) 방식"에 반대합니까? 몽고이의 구현과 일관성이 있다고 봅니다. – Stewart
예, 일반적으로 임베디드 문서에 대한 참조는 바람직하지 않습니다. 부분적으로 기술적 인 관점에서 (관계를 사용하는 객체는 임베디드 모델의 각 레이어에 대한 부모 객체를 알아야 함) 및 디자인 관점 (임베디드 객체는 부모를 통해서만 액세스해야합니다). 그러나, 당신의 예제는 다소 뚜렷한 경우입니다. 여러분이 참조하고있는 레코드의 부모 객체를 확실히 알고 있습니다 ('foo'). 아마도 임시 해결책으로 갈 것입니다 - 단점은 표준'belongs_to'와'has_one' 헬퍼를 사용할 수 없다는 것입니다. –