Rails关联不会自动保存

时间:2012-06-12 06:02:48

标签: ruby-on-rails activerecord associations

我正在试用rails指南中给出的self join example。我在表格中添加了'manager_id'字段。

问题是,在关联两个对象之后,直到我调用'save'才会反映它。

我在开发模式下通过控制台测试了它:

> boss, emp = 2.times.map { FactoryGirl.create :employee }
> emp.manager = boss
> emp.manager_id == boss.id
=> true
> boss.subordinates
=> []

如果我现在保存'emp',我会得到理想的结果。

> emp.save
> boss.subordinates
=> [#Employee obj]

为什么会这样?我是否也必须使用相同的方法编写测试用例?不知怎的,我觉得我做错了,应该有更好的方法。

2 个答案:

答案 0 :(得分:1)

在你的第一个代码示例中,你的emp实例已被分配了一个管理器,但是你的boss对象没有任何下属,数据库中也没有。

在您调用save on emp之前,ActiveRecord不会知道您将boss作为管理员添加到另一个对象。当您调用save时,记录将保存到数据库中。

将记录保存到测试脚本的数据库没有任何问题,只要您有一个清理脚本,可以在创建它们后删除不需要的记录。这也将测试您的模型的验证和关联。

答案 1 :(得分:1)

当你调用boss.subordinates时,ROR会像这样发出SQL请求:

Select * from subordinates where subordinates.id = #{id}

在你的情况下,下属的数据库中没有记录,你什么也得不到。

您必须将记录保存在数据库中才能使您进行关联工作。