2011-03-25 5 views
1

이상한 문제가 있습니다. 나는 mongoid에 새로운 오전, 그래서 난 내 코드는 아마도 최선의 설명이다 제시 ... 고장 날 또는 mongoid 인 경우 문제가 결정을 가진 (마이너스 필드/검증/등.)을 가진mongoid references_and_referenced_in_many

class User 
    include Mongoid::Document 
    embeds_one :profile, :class_name => "UserProfile" 
    references_and_referenced_in_many :roles 
end 

class UserProfile 
    include Mongoid::Document 
    embedded_in :user 
end 

class Role 
    include Mongoid::Document 
    references_and_referenced_in_many :users 
end 

하고 난과 같이 이러한 오브젝트의 인스턴스를 생성 할 때 제가 User.first.profile 및으로 프로파일을 볼 수 ...

user = User.new :username => 'username', 
       :email => '[email protected]', 
       :password => 'password' 
user.build_profile :first_name => 'John', 
        :last_name => 'Doe', 
        :birthday => Date.new(1980, 1, 1) 
user.roles << Role.new(:name => 'Administrator') 
user.save 

... 나 User.first 또는

user으로 사용자를 볼 수 ... 연관 따라

... 난 user.roles와 역할을 볼 수 있지만 난 User.first.roles 그들을 볼 수 없습니다 수 있습니다.

다른 이상한 것은 user.roles.count이고 User.first.roles.count은 모두 user.roles을 볼 때도 [#<Role _id: 4d8c0173e1607cdeae00002c, name: "Administrator", user_ids: [BSON::ObjectId('4d8c0173e1607cdeae00002a')]>]을 표시하지만 모두 0을 반환합니다. (User.first.roles는 빈 배열을 반환합니다)

이것은 버그 같아 보입니다.

답변

2

사용 : 자동 저장 => 관계 협회

references_and_referenced_in_many :roles, :autosave => true 

에 대한 사실 또는 명시 적으로이 mongoid.2.0.0.rc의 변화로 인해입니다 role

role = Role.new(:name => 'Administrator') 
user.roles << role 
role.save 
user.save 

로 저장할 수 있습니다. 1 + 나열된 here.

관계 협회 더 이상 자동 저장 부모 관계가 만들어 가없는 경우. 이전에 references_many 또는 references_one 연관이로드 된 인 새로운 문서에 저장하면 관계가 처음으로 에 저장됩니다. 아직 저장하지 ..

+0

흠 (이것은 단지 references_many 및 references_one 적용) => 사실 옵션은 매크로 에 제공해야합니다 자동 저장 : 위해 되돌려을이 기능을 얻을 수 있습니다. 또한 user.roles는 배열이므로 save 메소드가 없습니다. – brewster

+0

자동 저장 기능이 작동해야합니다. 어쨌든 위의 답변을 편집했습니다. 도움이 되었으면 좋겠어요. – zoras

+0

그래, 작동하지만, 자동 저장하지 않는 이유가 궁금합니다. 나는 rc7을 사용했기 때문에 rc8에 올랐지 만 동일한 결과로 ... 자동 저장은 references_and_referenced_in_many와 함께 사용할 수 없으며 references_many & references_one은 독립적으로 사용할 수 있습니까? – brewster