Монгоидная ассоциация и шаблон нулевого объекта?
Как бы вы реализовали шаблон нулевого объекта в отношении Mongoid?
Class Owner
include Mongoid::Document
embeds_one :preference
end
У большинства владельцев нет предпочтений, и поэтому я хочу, чтобы вместо них у них была 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
и вместо этого используйте значения по умолчанию.
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
Может быть, есть более простые способы.