我發送序列化數據到需要訪問可能嵌入或不嵌入Mongoid文檔的類。Mongoid嵌入式收集響應:查找
在嵌入式文檔的情況下,我接受可變數量的參數,我reduce
獲得嵌入式文檔。
的代碼非常簡單:
def perform(object, *arguments)
@opts = arguments.extract_options!
@object = arguments.reduce(object){|object, args| object.public_send(*args)}
# [...]
我用public_send
,因爲據我所知,我只需要調用公共方法。
但是,當我嘗試訪問嵌入式文檔時,我得到了一些非常奇怪的結果,其中@object
是一個枚舉器。
一些調試後,這是我發現,對於任何根文件object
和嵌入式收集items
,我有:
object.items.public_send(:find)
# => #<Enumerator: ...>
object.items.send(:find) # or __send__
# => nil
調用的方法是不一樣的,在所有的時候我打電話public_send
或send
!
- 這怎麼可能?
- 這是正常的嗎?這是一個錯誤?
public_send
似乎調用的Array
(Enumerable
),但send
(或__send__
)的find
方法調用Mongoid
編輯的find
方法:簡單reproductible情況:
require 'mongoid'
class User
include Mongoid::Document
field :name, type: String
embeds_many :groups
end
class Group
include Mongoid::Document
field :name, type: String
embedded_in :user
end
Mongoid.load_configuration({
sessions: {
default: {
database: 'send_find',
hosts: [
'localhost:27017'
]
}
}
})
user = User.create(name: 'john')
user.groups.create(name: 'g1')
user.groups.create(name: 'g2')
puts "public_send :find"
puts user.groups.public_send(:find).inspect
# => #<Enumerator: [#<Group _id: 5530dea57735334b69010000, name: "g1">, #<Group _id: 5530dea57735334b69020000, name: "g2">]:find>
puts "send :find"
puts user.groups.send(:find).inspect
# => nil
puts "__send__ :find"
puts user.groups.__send__(:find).inspect
# => nil
鏈接已死亡。任何更新? –
@JordanLapp存儲庫已移動,我更新了鏈接。 無論如何,此後合併請求已被接受 – Geoffroy