ruby-on-rails - 简单的递归方法

标签 ruby-on-rails ruby

我有主板模型。版 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/

相关文章:

ruby-on-rails - 为什么我在 Rails 中得到 "Errno::ECONNREFUSED"和 'net/http'?

ruby - 内存在过程中有效吗?

ruby-on-rails - 当 Rails 中缺少请求的模板时呈现默认模板

ruby-on-rails - 你如何撤消 bundle install --without

ruby-on-rails - 每隔几秒运行一次后台作业

ruby-on-rails - 在 Ruby on Rails 中加载 JSON 数据以使用 HIGHCHARTS

javascript - 在 Javascript 中通过 Rails Controller 添加数据 redred 的最佳方法是什么

ruby-on-rails - 仅当我测试我的 Rails 应用程序时,SSL 连接错误 (localhost :3000) on chrome. 它适用于 Firefox

ruby-on-rails - 在Rails中创建域表(查找表)的首选方法是什么

ruby-on-rails - 使用 AngularJS 的 RoR SPA 架构