1

尝试对一个对象执行 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]吗?

4

1 回答 1

1

在这一点上,我可以说该ancestry列的格式不正确。因为,如果我查看 id 为 4(孩子 2-1)的记录,它的祖先说他的父母是记录 id 2,记录 2 是根记录。这是错误的。

祖先列的格式是“root_id/son_id/son_id/.../parent_of_current_record_id”。

记录 id 4 的祖先列必须设置为:

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

或者

pc.parent_id = 2
pc.save

和祖先宝石建立祖先柱。

于 2014-11-03T13:04:56.053 回答