我有主板模型。版 block 可以订阅其他版 block (作为提要)。 假设我有这样的板树:
http://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Binary_tree.svg/200px-Binary_tree.svg.png
所以:
Board.find(2).feeds
是板 5 和 7
Board.find(7).feeds
是板 2 和 6 等。
我想编写方法all_feeds
,它返回特定板的所有级别的所有提要。例如:
Board.find(7).all_feeds
将输出 ID 为 2,6,5,11 的板数组
我从以下内容开始:
def all_feeds
if feeds.empty?
return
else
feeds.each {|feed| feed.all_feeds}
return feeds
end
end
可能必须将此返回源添加到某个全局数组中,但不确定应该如何执行此操作。
感谢您的帮助。
ps。这并不总是二叉树,您可以有超过 2 个提要。
最佳答案
我想你想要的可以通过以下方式实现:
def all_feeds
unless feeds.empty?
feeds + feeds.map(&:all_feeds).flatten.compact
end
end
Array#flatten使结果为一维,而 Array#compact删除 nil 组件。
关于map(&:all_feeds)
部分的解释,可以引用this SO answer :)
关于ruby-on-rails - 简单的递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17363271/