2013-03-05 3 views
2

Mongoid 릴레이션에서 널 오브젝트 패턴을 구현하는 방법은 무엇입니까?몽고이 협회 및 null 개체 패턴?

Class Owner 
    include Mongoid::Document 
    embeds_one :preference 
end 

대부분의 소유자는 환경 설정이 없습니다, 따라서 나는 벤 Orenstein의 excellent talk에 설명 된대로 그들을 대신 NullPreference을 갖고 싶어.

class NullPreference 
    def name 
    'no name' 
    end 
end 

owner = Owner.new 
preference = owner.preference 
preference.name 
=> 'no name' 

내가, 아니 대답하지만 액티브에서 같은 일에 대한 관련 question을 발견 : 내가 좋아하는 것이 무엇

이 같은 것입니다.

편집 : 그렇지 않으면 내가 autobuild: true을 사용했습니다 수 Mongoid 2.6을 사용하고 실제Preference을 얻을 대신 기본값을 사용하고 있습니다.

답변

1

명백한 방법은 해당 필드에 추상화 레이어를 만드는 것입니다.

class Owner 
    include Mongoid::Document 
    embeds_one :preference_field # internal field, don't use directly 

    def preference 
    preference_field || NullPreference.new 
    end 

    def preference= pref 
    self.preference_field = pref 
    end 
end 

더 간단한 방법이있을 수 있습니다.

+0

감사합니다. 세르지오, 확실히 가능합니다! 그러나 아마도 더 깨끗한 방법이있을 것입니다. – Yeggeps