我遇到的另一个问题是改变类如果
我有以下类定义
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
我得到未定义方法'find_all_family_nil'在[]:Array上的错误
我明白发生了什么事。自定义方法返回数组对象,方法定义在Class::Map 上。如何在自定义类上创建自定义方法,这些方法可以返回更高类的对象,并且能够链接它们
我遇到的另一个问题是改变类如果
@map = Map.new
然后 @map = @map + [1,2,3]
@map.class # => Array
为什么会发生这种情况,应该做什么,这是哪个研究领域
正如您可能已经想到的,您的find_all
方法在应该返回Map
对象时返回Array
对象。
我能想到的一个修复方法是:
class Map < Array
def find_all(&block)
self.class.new(super(&block))
end
end