我注意到,通过以编程方式从父对象遍历到子对象,然后再返回,我得到的父对象与原始对象不同。
例如:
家长班:Car
儿童班:Seat
car
有许多seats
puts(@car.to_s) => a memory address
puts(@car.seats.first.car.to_s) => totally different address
我注意到了这一点,因为我最近通过迁移向Car添加了一个新的字符串字段,并试图通过遍历座位上的关系来读取它,该字段始终为零!但是,将字段添加到脚手架视图并检查数据库,新字段和值都在那里。
这很奇怪,因为所有旧字段都可用。它只是新的不是。对于它的价值,倒数第二个字段也是一个字符串。
引擎盖下发生了什么?我需要做什么?谢谢!
答案 0 :(得分:0)
让我们假设父母和子女课程,你的意思是Car has_many Seats。您可以尝试告诉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