在我的模型中,我有三個複雜的作用域返回折扣對象數組。其中每一個都可以重疊,我想做一些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