我使用带有 rails 模型的 Mongoid 遇到了这个错误:
NoMethodError: 未定义方法 `[]' 为 nil:NilClass
为简化起见,我的类声明如下:
class Fruit
include Mongoid::Document
field :name, type: String
def initialize
self.name = 'fruit'
end
end
Run Code Online (Sandbox Code Playgroud)
最初我无法弄清楚这是从哪里来的,所以我开始削减事情。取出 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
Run Code Online (Sandbox Code Playgroud)
这有效,但似乎不太理想。再说一次,也许没问题。我想发布这个是因为 a) 我很难找到类似问题的描述,并且 b) 我虽然这在 mongoid 中没有很好的记录。
据我了解,Mongoid gem 重载初始化,我尝试覆盖初始化重新重载并破坏了 Mongoid::Document 初始化过程。