如何在Mongoid关系上实现null对象模式?
Class Owner
include Mongoid::Document
embeds_one :preference
end
大多数所有者都没有偏好,因此我希望他们有一个NullPreference,如Ben Orenstein的excellent talk所述。
我想要的是这样的:
class NullPreference
def name
'no name'
end
end
owner = Owner.new
preference = owner.preference
preference.name
=> 'no name'
我在ActiveRecord中发现了一个相关的question相同的内容,但没有答案。
编辑:我正在使用Mongoid 2.6,否则我可以使用autobuild: true
并获得真实 Preference
并使用默认值。
答案 0 :(得分: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
也许有更简单的方法。