假设我有一堂课
class Foo
include Mongoid::Document
include Mongoid::Timestamps
has_many :bars
end
有什么办法可以覆盖some_foo.bars.push(some_bars)
吗?大多数情况下,我想在调用 parent 之前放入一些业务逻辑#push
。
谢谢!
假设我有一堂课
class Foo
include Mongoid::Document
include Mongoid::Timestamps
has_many :bars
end
有什么办法可以覆盖some_foo.bars.push(some_bars)
吗?大多数情况下,我想在调用 parent 之前放入一些业务逻辑#push
。
谢谢!
您可以创建允许您为关系添加/覆盖方法的扩展。
来自Mongoid 文档:
扩展
所有关系都可以有扩展,这提供了一种向关系添加应用程序特定功能的方法。它们是通过为关系定义提供一个块来定义的。
在那里您可以覆盖该:<<
方法并用于super
调用原始方法:
class Foo
include Mongoid::Document
has_many :bars do
def <<(obj)
puts 'called'
super
end
end
end
但要小心把重要的东西放在那里,因为Bar
不使用 - 方法很容易创建 s :<<
:Bar.create! foo: some_foo
会跳过你的业务逻辑。