我可以覆盖has_many或has_and_belongs_to_many关系的Mongoid push(即<<<)方法吗?

时间:2013-08-12 16:16:00

标签: ruby-on-rails mongoid

让我们说我有一个班级

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

  has_many :bars
end

有没有办法覆盖some_foo.bars.push(some_bars)?大多数情况下,我想在调用父#push之前输入一些业务逻辑。

谢谢!

1 个答案:

答案 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会跳过您的业务逻辑。