我有一個使用行爲樹的模型。例如:在提交數據庫之前ActiveRecord關聯是否有效?
class CartoonCharacter < ActiveRecord::Base
acts_as_tree
end
充當樹有這些協會:
class ActsAsTree
belongs_to :parent
has_many :children
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 2009-08-30 00:22:42