Mongoid协会& null对象模式?

时间:2013-03-05 18:24:04

标签: ruby mongoid null-object-pattern

如何在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并使用默认值。

1 个答案:

答案 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

也许有更简单的方法。