Рельсы 4: родословная не работает должным образом?

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

# == 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]?

1 ответ

Решение

На данный момент я могу сказать, что ancestry столбец плохо отформатирован. Потому что, если я смотрю запись с идентификатором 4 (ребенок 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

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

Другие вопросы по тегам