我的情况比较奇怪。
我的OrdersController
有edit
方法,在某些时候我有以下声明:
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_id
为67520280
,而第二个请求则更改为177601092
。)
我的问题是:什么可能导致Item
ActiveRecord改变其在内存中的位置?
有用信息:我正在使用rails 3.0.20
更新:
我发现这种ID的变化非常普遍。但我仍然无法弄清楚为什么期望不会像Item.object_id
那样改变。
答案 0 :(得分:0)
尽管我没有使用Factory Girl,但this answer和this discussion帮助了我很多。
TL;博士
当我在我的环境中将cached_classes
设置为true
时,问题就解决了。