我跑進使用Mongoid與軌道模型此錯誤:Mongoid超載的初始化
NoMethodError: undefined method `[]' for nil:NilClass
爲了簡化,我的課被宣佈如下:
class Fruit
include Mongoid::Document
field :name, type: String
def initialize
self.name = 'fruit'
end
end
起初我想不出這是從哪裏來的,所以我開始削減一些東西。採取Mongoid :: Document包括解決問題(但顯然不是理想的)。進一步按摩谷歌後,我發現這個討論:
https://github.com/mongoid/mongoid/issues/1678
...這說明了同樣的問題。當我想用一個初始化的機制來設置實例變量在子類中,我想出了這個解決方案:
class Fruit
include Mongoid::Document
field :name, type: String, default: ->{ self.do_init }
def do_init
self.name = 'fruit'
end
end
這工作,但似乎不太理想。然後再一次,也許沒關係。我想發佈這個是因爲:a)我很難找到類似問題的描述,b)我雖然在mongoid中沒有很好的記錄。
據我所知,Mongoid gem重載初始化,並且我試圖覆蓋初始化重新重載並打破了Mongoid :: Document的初始化過程。
對;這是我輸入的一個例子。編輯以糾正以上。感謝您收到 – sgillesp
before_create可能是最接近於Object :: initialize pattern.thanks! – sgillesp