2

假设我有一堂课

class Foo
  include Mongoid::Document
  include Mongoid::Timestamps

  has_many :bars
end

有什么办法可以覆盖some_foo.bars.push(some_bars)吗?大多数情况下,我想在调用 parent 之前放入一些业务逻辑#push

谢谢!

4

1 回答 1

1

您可以创建允许您为关系添加/覆盖方法的扩展。

来自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会跳过你的业务逻辑。

于 2013-12-06T21:56:19.917 回答