Rails - ActiveRecord - 它如何填充对象和关系?

时间:2011-09-15 22:20:33

标签: ruby-on-rails activerecord

我注意到,通过以编程方式从父对象遍历到子对象,然后再返回,我得到的父对象与原始对象不同。

例如:

家长班:Car

儿童班:Seat

car有许多seats

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

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

我注意到了这一点,因为我最近通过迁移向Car添加了一个新的字符串字段,并试图通过遍历座位上的关系来读取它,该字段始终为零!但是,将字段添加到脚手架视图并检查数据库,新字段和值都在那里。

这很奇怪,因为所有旧字段都可用。它只是新的不是。对于它的价值,倒数第二个字段也是一个字符串。

引擎盖下发生了什么?我需要做什么?谢谢!

1 个答案:

答案 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