在自定义类中链接返回超类对象的方法

时间:2015-08-09 14:40:41

标签: ruby class object methods chaining

我有以下课程定义

class Map < Array

def find_all_activerecord
  self.find_all { |element| element.class.superclass == ActiveRecord::Base }
end

def find_all_family_nil
  find_all { |element| element.try(:family) == nil }
end

def find_all_parents
  self.find_all_activerecord.find_all_family_nil
end

end

我可以做以下

@map = Map.new
@map.find_all_activerecord
@map.find_all_family_nil

但是当我尝试

@map.find_all_parents

我收到未定义方法的错误&#39; find_all_family_nil&#39; on []:Array

我明白发生了什么。自定义方法返回数组对象,方法在Class :: Map

上定义

如何在自定义类上创建自定义方法,可以返回更高级别的对象,并且能够链接它们

我遇到的另一个问题是 改变班级 如果

   @map = Map.new

然后

   @map = @map + [1,2,3]

   @map.class # => Array

为什么会发生什么应该做什么以及这个研究领域是什么

1 个答案:

答案 0 :(得分:3)

正如您可能已经想到的那样,find_all方法在返回Array对象时会返回Map个对象。

我能想到的一个解决方案是:

class Map < Array
  def find_all(&block)
    self.class.new(super(&block))
  end
end