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