ActiveRecord改变内存的位置

时间:2014-05-14 18:19:05

标签: ruby-on-rails memory activerecord

我的情况比较奇怪。

我的OrdersControlleredit方法,在某些时候我有以下声明:

order_item.item = item

您可以猜测,order_item.item需要引用Item对象,这正是item的内容。这是一个谜。我第一次向orders/{some_order_id}/edit发送请求时,会收到预期的响应。但是,如果我发送一个新请求(即使我只按F5)应用程序崩溃,我收到以下错误消息:

ActiveRecord::AssociationTypeMismatch in OrdersController#edit

Item(#177601092) expected, got Item(#67520280)

到目前为止我发现了什么?我在puts "#{Item.object_id}"之前放了order_item.item = item,发现Item.object_id从请求更改为另一个请求,这意味着Item ActiveRecord正在更改其在内存中的位置。 (例如,在上面的示例中,第一个请求期间Item.object_id67520280,而第二个请求则更改为177601092。)

我的问题是:什么可能导致Item ActiveRecord改变其在内存中的位置?

有用信息:我正在使用rails 3.0.20

更新: 我发现这种ID的变化非常普遍。但我仍然无法弄清楚为什么期望不会像Item.object_id那样改变。

1 个答案:

答案 0 :(得分:0)

尽管我没有使用Factory Girl,但this answerthis discussion帮助了我很多。

TL;博士

当我在我的环境中将cached_classes设置为true时,问题就解决了。