【问题标题】:Mongoid association & null object pattern?Mongoid 关联和空对象模式?
【发布时间】:2013-02-20 07:03:23
【问题描述】:

如何在 Mongoid 关系上实现空对象模式?

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 并获得 real Preference 并改用默认值。

【问题讨论】:

    标签: ruby mongoid null-object-pattern


    【解决方案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
    

    也许有更简单的方法。

    【讨论】:

    • 感谢塞尔吉奥,这当然是可能的!但也许有更清洁的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    相关资源
    最近更新 更多