2011-03-01 2 views
0

mongoid 2.0.0.beta20을 사용하면 의미가 있습니다.MongoID 및 다 대다 관계에 대한 도움이 필요합니다.

목표는 매우 간단하지만 얻을 수는 없습니다. 나는 User 모델을 가지고있는 물론, 인간 즉

references_many :users, :inverse_of => :worlds 

는, 사용자가 세계를 0..inf 방문 할 수 있으며, 세상이 방문 할 수

references_many :worlds, :inverse_of => :users 

World, 1. 사용자. World에는 거기에 있었던 사용자의 ID 목록을 저장해야하며 사용자는 그가 방문한 세계의 ID 목록을 저장해야합니다. 꽤 쉽게 보이지만 나를 위해 일하고 싶지 않습니다.

이제 사용자 (예 : someone)와 인스턴스 2 개 (earthmars 일 수 있음) 인스턴스가 있습니다. 내가 someoneearth을 방문한다는 말을하려고하면 문제가 없습니다 : 그런 다음

earth.users << someone 
earth.users.count # => 1 

, 나는 someonemars에되어 있음을 말하고 싶은 :

mars.users << someone 
mars.users.count # => 1 

모든 게 OK? 확실하지 :

someone.worlds << earth 
NoMethodError: You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.<< 

(및 기타 Array 방법이 있음을 제기 : 나는 또한 (방향은 중요하지 않습니다) 전혀 성공을 관계 :stored_as => :array 매개 변수를 사용하여 시도,하지만 거기

earth.users.count # => 0 
someone.worlds.count # => 0 

나는 아무렇지도 않게 다루려고 노력했다.)

어쩌면 내가 뭔가를 놓쳤거나 뭔가 잘못하고있을 수도있다. 제발,이 문제를 해결하도록 도와주세요.

답변

0

, 당신은 그 관계의 종류의 일을위한 새 매크로를 사용할 수 있습니다 베타 20에서

references_and_referenced_in_many :worlds

를 사용 바른 길에 있었다 : stored_as => :정렬. 그렇게 기본 설정을 시도하고 그것은 당신을 위해 작동합니다.

references_many :worlds, :stored_as => :array, :default => []

+0

내 컨트롤러 (컨트롤러가 하나 개의 인스턴스 만 작동하므로 다른 방법이 없다)에'save' 전화, 감사합니다 – at8eqeq3

0

MongoID를 사용하면 '문서'에 대한 변경 사항을 유지하기 위해 earth.users << someone과 같이 수정 한 후에 문서를 명시 적으로 earth.save해야 할 수도 있습니다. 최신 RC로 업그레이드하는 경우

+0

내가 명시 적으로 2.0.0.rc.1가 도움이되었습니다로 업그레이드 – at8eqeq3

관련 문제