Ruby on rails rails递归方法问题
我在尝试在rails/ruby中使用递归方法时遇到了一个问题。其目的是基于父类id查找给定类别的所有祖先类别。当前方法确实返回正确的祖先类别,但它正在嵌套数组。我认为这是因为我正在初始化category_祖先数组,然后随着方法本身的递归,它将被重新初始化。我试图弄清楚如何改变这一点,以便得到一个带有category属性的单级数组,而不是它现在是如何输出数据的Ruby on rails rails递归方法问题,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在尝试在rails/ruby中使用递归方法时遇到了一个问题。其目的是基于父类id查找给定类别的所有祖先类别。当前方法确实返回正确的祖先类别,但它正在嵌套数组。我认为这是因为我正在初始化category_祖先数组,然后随着方法本身的递归,它将被重新初始化。我试图弄清楚如何改变这一点,以便得到一个带有category属性的单级数组,而不是它现在是如何输出数据的 def self.get_ancestors(category) category_ancestors = [] # <--
def self.get_ancestors(category)
category_ancestors = [] # <-- this seems to be the problem
category_ancestors << category.attributes
if category.has_parent?
category.get_parent.each do |parent_category|
category_ancestors << get_ancestors(parent_category)
end
end
category_ancestors.reverse
end
这里有一个非递归版本,它做同样的事情
class Category
def ancestors
result = []
c = self
while c.parent
result.unshift(c.parent)
c = c.parent
end
result
end
end
这里有一个非递归版本,它做同样的事情
class Category
def ancestors
result = []
c = self
while c.parent
result.unshift(c.parent)
c = c.parent
end
result
end
end
如果需要平面数组,则应使用concat()将元素连接到单个数组中,而不是以数组数组结束
def self.get_ancestors(category)
category_ancestors = [] # <-- this seems to be the problem
category_ancestors << category.attributes
if category.has_parent?
category.get_parent.each do |parent_category|
category_ancestors.concat(get_ancestors(parent_category))
end
end
category_ancestors.reverse
end
def self.get_祖先(类别)
category_祖先=[]。如果需要平面数组,则应使用concat()将元素连接到单个数组中,而不是以数组数组结束
def self.get_ancestors(category)
category_ancestors = [] # <-- this seems to be the problem
category_ancestors << category.attributes
if category.has_parent?
category.get_parent.each do |parent_category|
category_ancestors.concat(get_ancestors(parent_category))
end
end
category_ancestors.reverse
end
def self.get_祖先(类别)
category_祖先=[]。我会使用如下内容:
category_ancestors += get_ancestors(parent_category)
我会用这样的方式:
category_ancestors += get_ancestors(parent_category)
非常感谢,我现在看到我应该使用concat将东西保存在单个数组中。非常感谢,我现在看到我应该使用concat将东西保存在单个数组中。