重写DataMapper方法时无限递归

时间:2013-04-19 17:31:36

标签: ruby datamapper ruby-datamapper

我正在尝试覆盖我所拥有的DataMapper模型中的all()first()方法,但是存在一些问题。我的方法被调用了,但是(很明显)它们会递归地调用它们并导致SystemStackError。

class Model
  include DataMapper::Resource
  include OtherModule

  def self.all(options = {})
    do_something()
    self.all(options.merge!(:deleted => false))
  end

  def self.first(options = {})
    self.first(options.merge!(:deleted => false))
  end

  property :id,           Serial
  property :name,         Text
  ...

除非另有说明,否则所有这些方法都应使用all调用first:deleted => false方法。

我试过

  def self.all(options = {})
    super.self.all(options.merge!(:deleted => false))
  end

  def self.all(options = {})
    do_something()
    super.all(options.merge!(:deleted => false))
  end

无济于事。有没有解决这种无限递归问题的方法?

1 个答案:

答案 0 :(得分:1)

你在滥用超级

def self.all(options={})
    do_something()
    super(options.merge!(:deleted => false))
 end