2014-11-03 3 views
1

하나의 객체의 root_id를 시도 할 때 문제가 있습니다. 내가 할 때레일 4 : 가계가 제대로 작동하지 않습니까?

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 

: 데이터베이스 테이블 보이는

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

class PackageCategory < ActiveRecord::Base 
    has_ancestry 
end 

것을 :

@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"이름은 id 5 (테이블에 표시된대로)입니다. –

답변

1

이 시점에서 나는 ancestry 열이 잘 형성되어 있지 않다고 말할 수 있습니다. 왜냐하면 내가 ID 4 (자식 2-1)로 레코드를 보면, 그 조상은 부모가 레코드 id 2이고 레코드 2가 루트 레코드라고합니다. 그리고 그것은 거짓입니다.

조상 컬럼의 형식은 'root_id/son_id/son_id /.../ parent_of_current_record_id'입니다.

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

또는

pc.parent_id = 2 
pc.save 

그리고 조상 보석은 조상 열을 구축 :

레코드 ID 4의 조상 열을 설정해야합니다.