我正在尝试修改Mongoid模型属性的setter,但与ActiveRecord不同,我不能调用super来让Mongoid实际设置属性,因为模型使用include Mongoid::Document
而不是ActiveRecord::Base
的子类1}}。
我希望能够做到这样的事情。
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
答案 0 :(得分:1)
在我看来,你所做的事情根本不属于用户模型。我将在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
答案 1 :(得分:0)
如果是嵌入式文档,您可以执行以下操作:
def doc=(_doc)
self.build_doc(_doc.attributes)
end
我在控制台中尝试了它,但没有尝试保存并将其检索回来。如果父项是新记录,则保存应该没有问题,否则您可能需要研究如何在嵌入式文档上调用保存。