попытка обойти дерево, всегда безрезультатно

#ruby-on-rails

#ruby-on-rails

Вопрос:

У меня есть n-уровневая партнерская система, которую я пытаюсь использовать, чтобы я мог получать подсчеты и списки дочерних аффилированных лиц. У меня есть, среди прочих полей, «id» и «affiliate_id» для каждой записи.

 def find_affiliates_under(affid)
  affs=Array.new
  Affiliate.find(:all, :conditions => "affiliate_id = "   affid.to_s, :select => :id).each do |a|
    affs.concat(find_affiliates_under(a.id))
  end
return affs.uniq
end
  

Что я делаю не так? Был бы признателен за указатель от кого-то с большим опытом работы с Ruby
Спасибо!

Ответ №1:

Вы id ‘ы или вы также ищете сами вложенные объекты. Устанавливая select => :id опцию, вы будете выбирать только id для каждого объекта.

Могу ли я порекомендовать взглянуть на awesome_nested_set . Я думаю, это позволит достичь того, что вы пытаетесь сделать, сэкономив при этом некоторое время.

Комментарии:

1. В этом случае, например, я просто хочу посчитать дочерние элементы. Я видел действия как плагины для дерева и вложенных наборов, любой из них потребует изменений модели данных, что я не могу сделать из-за сложности приложения, которое я перепроектирую.