2

Mongoid リレーションで null オブジェクト パターンをどのように実装しますか?

Class Owner
  include Mongoid::Document
  embeds_one :preference
end

ほとんどの所有者はプリファレンスを持たないため、Ben Orenstein の優れた講演で説明されているように、代わりに NullPreference を使用してもらいたいと考えています。

私が欲しいのは次のようなものです:

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

4

1 に答える 1

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

もっと簡単な方法があるかもしれません。

于 2013-03-05T18:27:37.227 に答える