移动到方法会导致“未定义的方法”

时间:2012-05-11 20:14:23

标签: ruby

我正在尝试将两种类似的方法组合成一个方法,但我遇到了一些问题。

目前:

def self.tree
  self.projects.sort_by(&:name).map do |assembly|
    [ assembly, assembly.assemblies.map(&:tree) ]
  end
end

def tree
  [ self, self.assemblies.map(&:tree), self.parts ]
end

我尝试将其更改为

def self.tree
  self.build_tree( self.projects )
end

def tree
  self.build_tree( [self] )
end

def build_tree( set )
  set.sort_by(&:name).map do |assembly|
    [ assembly, assembly.assemblies.map(&:tree), assembly.parts ]
  end
end

但我得到undefined method 'build_tree' for #<Class:0x000000036a5588>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可能将树称为类方法。在这种情况下,此方法尝试调用静态build_tree(self是自己的Class)。工作你需要做那样的事情:

def self.build_tree(set)
   code...
end