Mongoid定制的setter / getters和super

我正在尝试修改属性Mongoid模型上的setter,但与ActiveRecord不同,我不能调用super来让Mongoid实际设置属性,因为模型使用include Mongoid::Document而不是ActiveRecord::Base的子类。

我希望能够做这样的事情。

 class User include Mongoid::Document embeds_one :email_account def email_account=(_email_account) ret = super puts "email account updated!" do_something ret end end 

除了,因为它不是一个子类,产生

NoMethodError: super: no superclass method

想法?

编辑:

你会怎么做一个吸气剂,比如

 class User include Mongoid::Document embeds_one :email_address def email_address super || "myself@gmail.com" end end 

如果是嵌入式文档,您可以执行以下操作:

 def doc=(_doc) self.build_doc(_doc.attributes) end 

我在控制台中尝试了它,但没有尝试保存并检索它。 如果父项是新记录,则保存应该没有问题,否则您可能需要研究如何在嵌入式文档上调用保存。

在我看来,你所做的事情根本不属于用户模型。 我将在EmailAccount模型中创建另一个方法,并将其与after_save回调挂钩。

 class EmailAccount include Mongoid::Document embedded_in :user after_save :do_something def do_something puts "email account updated!" do_actual_something end end 

另一种方法是使用观察员http://mongoid.org/docs/callbacks/observers.html