2011-11-30 5 views
1

모델 : 컨트롤러에서검증 협회

class User 
    include MongoMapper::Document 
    many :properties 
    validates_associated :properties 
    ... 
end 

class Property 
    include MongoMapper::Document 
    belongs_to :user 
    many :services 
    validates_associated :services 
    ... 
end 

class Service 
    include MongoMapper::Document 
    belongs_to :property 
    ... 
end 

:

@property.save #returns false and true as expected 
current_user.save #returns always true why? 

그것이 current_user.save 방법으로 속성 모델을 검증 나던 것으로 보인다. 왜? :(

+0

간단한 테스트에서'validates_associated'는 임베디드 어소시에이션에서만 작동합니다. 나는 조사 중이며, 그 이유가 바로 코드에서 분명하지 않기 때문입니다. –

답변

1

MongoMapper에서 비 내장 임베디드 많은 연관성을 지정하면 관련 레코드가 자동으로 저장되지만, 유효하지 않은 레코드는 자동으로 데이터베이스에 저장되지 않습니다. 다음에 요청할 때 협회 MongoMapper는 데이터베이스로 이동 아무것도 발견하지. 당신이 할당 된 잘못된 기록이 사라집니다.

user = User.new(:properties => [Property.new]) 
user.properties # => [] 
user.valid?  # => true 

당신은 저장하지 않고 협회에 객체를 추가 할 build 방법을 사용할 수 있습니다.

user = User.new 
user.properties.build 
user.properties # => [#<Property _id: BSON::ObjectId('...0e'), user_id: BSON::ObjectId('...0c')>] 
user.valid?  # => false 

내가 엉덩이를 고려 ociation은 MongoMapper의 단점 중 하나가되었습니다. 그러나 쉬운 문제는 아닙니다. 문제에 대한 설명은 issue #233 on github을 참조하십시오.