小编sgi*_*esp的帖子

初始化的 Mongoid 重载

我使用带有 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 初始化过程。

ruby ruby-on-rails mongoid

3
推荐指数
1
解决办法
1092
查看次数

标签 统计

mongoid ×1

ruby ×1

ruby-on-rails ×1