我有以下课程定义
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
为什么会发生什么应该做什么以及这个研究领域是什么
答案 0 :(得分:3)
正如您可能已经想到的那样,find_all
方法在返回Array
对象时会返回Map
个对象。
我能想到的一个解决方案是:
class Map < Array
def find_all(&block)
self.class.new(super(&block))
end
end