让我们说我有一个班级
class Foo
include Mongoid::Document
include Mongoid::Timestamps
has_many :bars
end
有没有办法覆盖some_foo.bars.push(some_bars)
?大多数情况下,我想在调用父#push
之前输入一些业务逻辑。
谢谢!
答案 0 :(得分:1)
您可以创建扩展,允许您添加/覆盖关系的方法。
来自Mongoid Docs:
扩展
所有关系都可以有扩展,这提供了一种向关系添加特定于应用程序的功能的方法。它们是通过为关系定义提供一个块来定义的。
您可以覆盖:<<
方法并使用super
来调用原始文件:
class Foo
include Mongoid::Document
has_many :bars do
def <<(obj)
puts 'called'
super
end
end
end
在将重要内容放在那里时要小心,因为在不使用Bar
方法的情况下创建:<<
很容易:Bar.create! foo: some_foo
会跳过您的业务逻辑。