查找特定对象下树状结构中存在的所有对象

时间:2019-07-08 12:06:34

标签: ruby-on-rails ruby-on-rails-5

我有一个Agent表。每个特工都有两名初级人员,他们本身就是实际的特工。同样,每个下级代理都有两个下级代理,依此类推。我如何才能找到特定座席的初中总数。

我的意思是,代理商总数中不包括初级代理商及其次级代理商等等。

代理表

class CreateAgents < ActiveRecord::Migration[5.2]
  def change
    create_table :agents do |t|
      t.string :name, index: true

      t.timestamps
    end
  end
end

儿童桌

class CreateJuniors < ActiveRecord::Migration[5.2]
  def change
    create_table :juniors do |t|
      t.references :junior, index: true
      t.references :agent, foreign_key: true

      t.timestamps
    end
    add_foreign_key :juniors, :agents, column: :junior_id
  end
end

1 个答案:

答案 0 :(得分:0)

看起来您需要找到二叉树中的节点数。 您可以这样做:

def get_number_of_juniors(agent)
  if agent.nil?
    return 0
  end
  count = 0
  if agent.juniors.present?
    agent.juniors.each do |junior|
      count += get_number_of_juniors(junior)
    end
  end
  return count+1
end