在我的模型中,我有三个复杂的作用域返回折扣对象数组。其中每一个都可以重叠,我想做一些Ruby数组联合/交集/减法操作。两个activerecord查询是否将同一个对象返回一条记录?
我想这些操作取决于对象ID。我想知道,如果折扣查询将通过不同的作用域返回与同一个对象相同的记录。在我的计划中,这些将在同一请求期间完成。
更新:
我错了,两次。每个返回的对象是真正不同的对象。尽管它们不同,但联合/交叉/减法操作仍能正常工作。
在我的模型中,我有三个复杂的作用域返回折扣对象数组。其中每一个都可以重叠,我想做一些Ruby数组联合/交集/减法操作。两个activerecord查询是否将同一个对象返回一条记录?
我想这些操作取决于对象ID。我想知道,如果折扣查询将通过不同的作用域返回与同一个对象相同的记录。在我的计划中,这些将在同一请求期间完成。
更新:
我错了,两次。每个返回的对象是真正不同的对象。尽管它们不同,但联合/交叉/减法操作仍能正常工作。
默认情况下不会 - 您会得到两个表示同一数据库行的对象。如果您需要说服力,请检查object_id
。
在Rails 3.1及以上版本中,您可以打开identity map。这可以确保在给定的请求中,数据库中的单个行将始终由单个ruby对象表示。它里面还有一些问题,这就是为什么默认情况下它没有打开。
谢谢,我一直在想id是object_id,是的每个查询返回不同的东西。 – lulalala 2012-04-05 12:17:51
我想你可能记得听到的是Rails标识映射。它是在Rails 3.1中引入的,但默认关闭,因为它显然不处理关联。
的文档是在这里:http://api.rubyonrails.org/classes/ActiveRecord/IdentityMap.html
原来拉请求:https://github.com/rails/rails/pull/76
以及围绕该问题的问题都可以在这里找到:Rails 3.1 Identity Map issues?
您是否尝试过测试这个?这很容易做到。 – meagar 2012-04-05 11:34:43