Mongoid关联和空对象模式?

3
你如何在Mongoid关系中实现空对象模式?
Class Owner
  include Mongoid::Document
  embeds_one :preference
end

大多数所有者不会有偏好,因此我希望它们具有NullPreference,正如Ben Orenstein的优秀演讲中所述。

我想要的是这样的东西:

class NullPreference
  def name
    'no name'
  end 
end

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

我在ActiveRecord中找到了一个相关的问题,但没有答案。编辑:我正在使用Mongoid 2.6,否则我可以使用autobuild:true,获取一个真正的Preference并使用默认值。请参考这里
1个回答

2
一种明显的方法是在该领域上建立一个抽象层。
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

也许有更简单的方法。

谢谢Sergio,那肯定是一个可能性!但也许有更简洁的方法。 - Yeggeps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接