2011-09-15 77 views
1

我注意到,通過以編程方式從父對象遍歷到子對象,然後再回來,我得到的父對象與原始對象不一樣。Rails - ActiveRecord - 它如何填充對象和關係?

例如:

父類:Car

子類:Seat

一個car有許多seats

puts(@car.to_s) => a memory address 

puts(@car.seats.first.car.to_s) => totally different address 

我注意到這一點,因爲我最近增加了一個新的字符串場通過遷移,並試圖通過traversin讀取它克從座位回來的關係,該領域總是零!但是,將該字段添加到腳手架視圖並檢查數據庫,新字段和值就在那裏。

這很奇怪,因爲所有的舊字段都可用。這只是新的不是。對於它的價值,倒數第二個字段也是一個字符串。

這是怎麼回事?我需要做什麼?謝謝!

回答

0

讓我們假設通過父和子類,你的意思是汽車has_many座位。你可以試着告訴ActiveRecord一個關係是另一個關係的反向。

class Car < ActiveRecord::Base 
    has_many :seats, :inverse_of => :car 
end 

class Seat < ActiveRecord::Base 
    belongs_to :car, :inverse_of => :seats 
end 

所以,引用的Rails文檔,這樣做會讓你這樣的事情:

d = Dungeon.first 
t = d.traps.first 
d.level == t.dungeon.level # => true 
d.level = 10 
d.level == t.dungeon.level # => true 
+0

謝謝你的指針:inverse_of,良好的閱讀。不幸的是,它並沒有真正的工作。這些地址現在更加一致,但有時它仍然指向不同的地方。真的,最大的問題是這個場在我回溯時消失了......如果我直接獲取Car記錄,那麼這個問題是可用的。我甚至嘗試升級到3.1/1.9.2 ... – James