階段:爲什麼MongoId模型在循環中更改其object_id?
一類包括MongoId:
class Mission
include Mongoid::Document
include Mongoid::Timestamps
attr_accessor :distance
# ... other atts and methods ...
end
問題:
在Rails c
:
$ missions = Mission.all # => get all missions
$ missions[0].object_id # => 70264434234840
$ missions[1].object_id # => 70264410073940
# (for this example I will use only 2 records)
# Now look their object_ids on this loop:
$ missions.each {|m| puts m.object_id} # => 70264350130200, 70264359017780
# Second test with this example again:
$ for m in ms do puts m.object_id end # => 70264374331020, 70264374320260
的object_id
不是內相同和ou t的循環,並且在兩個循環之間也是不同的。所以如果distance
屬性被設置在一個bucle中,那麼這個bucle的值就是nil
。
aditional的信息:
的ActiveRecord和MongoId:此循環問題只MongoId發生時,我測試相同的例子用ActiveRecord和object_ids是相同的內部和外部循環。
我扣:
每次object_id
被調用時,將返回不同的值。 我想MongoId使得每當一個任務是實例化一個新的數據庫查詢(missions[0]
),而不使用missions
裏面的實例是集合(Mongoid ::標準)
問題:
- 爲什麼會發生?每個解釋都是值得歡迎的:)
- 如何迭代它的「MongoId對象」,以保留循環內外的相同任務實例? (如ActiveRecord的做)
感謝@ muIsTooShort,你是我的英雄! :) ..我明白'object_id'和'id'之間的區別,只是爲了解釋這個例子。謝謝。 – CristianOrellanaBak