나는 acts-as-tree를 사용하는 모델을 가지고있다. 예를 들어 전체 트리가 구축 될 때까지 아무것도 저장하지, 내 나무를 건물입니다 스크립트/콘솔에서데이터베이스에 커밋하기 전에 ActiveRecord 연결이 유효합니까?
class ActsAsTree
belongs_to :parent
has_many :children
end
: 나무로
class CartoonCharacter < ActiveRecord::Base
acts_as_tree
end
사도 행전은이 단체가 있습니다. 문제는 데이터베이스에 커밋하기 전에 트리를 성공적으로 탐색 할 수 없다는 것입니다. #parent 및 #sibling을 호출하면 의심스러운 결과가 발생합니다. 나는 내가 뭔가를 놓치고 있다고 가정 할 수있다.
fred=CartoonCharacter.new(:name=>'Fred')
fred.children.build(:name => 'BamBam')
pebbles = fred.children.build(:name => 'Pebbles')
fred.children #=> [BamBam, Pebbles]
fred.children.last.parent #=> nil --- why not Fred?
pebbles.siblings #=> [completely unrelated records from db??]
나는 이것이 연관이 처리되는 방식과 관련이 있다고 생각합니다. 메모리 내 ActiveRecord 구조가 완벽하게 탐색 할 수 있다고 생각했지만, 그렇지는 않습니다. 로깅을 콘솔로 강제하는 것에서부터 때때로 연관을 탐색하는 것이 데이터베이스 액세스를 유발한다는 점을 지적했습니다. 이로 인해 협회를 일주하는 방법을 알기가 어렵습니다. (나는 쿼리 캐싱에 대해 간단히 살펴 보았다.) 다른 사람들이 이것을 어떻게 처리 하는가? 아니면 언제나 레코드와 관계를 저지르고 있습니까? 이것은 수수께끼입니다.
는편집 :이 문제를 해결하기 위해 나타납니다 무엇
는 동시에 두 관계를 설정하는 것입니다. 즉, 누락 된 조각은 다음과 같습니다 :
pebbles.parent = fred
bambam.parent = fred
이것은 설계 상으로는 무엇입니까? 즉, 우리는 항상 상호 관계의 두 부분을 모두 설정해야합니까?
편집 :
관련 question
감사와 같은 위, 뭔가의
. 나는 내가 모든 것을 올바르게 설정했다고 믿지만 그것이 작동하도록 할 수 없었다. 나는 아이들에게 after_add 콜백을 사용하고 거기에 부모를 할당함으로써 이것을 작동 시키려고했다. – Mario