Рельсы 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
И драгоценный камень предков строит столбец предков.