2014-11-03 3 views
1

У меня проблема при попытке root_id одного объекта. Класс выглядит следующим образом:рельсы 4: родословная не работает должным образом?

# == Schema Information 
# 
# id   :integer   not null, primary key 
# name  :string(255) 
# ancestry :string(255) 

class PackageCategory < ActiveRecord::Base 
    has_ancestry 
end 

, что таблица базы данных выглядит:

id name   ancestry 
1 Root   NULL 
2 Child 1-1 1 
3 Child 1-2 1 
4 Child 2-1 2 
5 Child 3-1 4 

Когда я делаю:

@p = PackageCategory.find 5 
puts @p.root_id 

Я получаю: 4

Когда я типа:

@p.path_ids 

Я получаю: [4, 5]

puts @p.name дает мне Child 3-1 (и это правильно)

Итак, где проблема? Должен ли я попасть в первый случай 1, а во втором [1, 2, 4, 5]?

+0

Пожалуйста, дайте мне знать ваше соглашение об именах: Ребенок 3-1 означает первый ребенок id 3? –

+0

нет, нет никакого соглашения об именах, я взял их без какого-либо заказа. Это имя «Child 3-1» имеет идентификатор 5 (как показано в таблице). –

ответ

1

На данный момент я могу сказать, что колонка ancestry плохо сформирована. Поскольку, если я смотрю запись с id 4 (Child 2-1), ее родословная говорит, что его родитель является идентификатором записи 2, а запись 2 является корневой записью. И это ложно.

Формат в столбце предков: «root_id/son_id/son_id /.../ parent_of_current_record_id».

Предок столбец Индентификационный 4 должен быть установлен с помощью:

pc = PackageCategory.find(4) 
pc.parent = PackageCategory.find(2) 
pc.save 

или

pc.parent_id = 2 
pc.save 

И родословная камень построить столбец родословной.

Смежные вопросы