mongoid中的未定义方法

时间:2015-04-28 23:24:23

标签: ruby mongoid

我希望能够动态地取消定义mongoid字段。我在类对象的上下文中尝试了undef方法。不幸的是它不起作用,如下所示:

class MongoTest
  include Mongoid::Document
  field :abc, type: Integer
  field :def, type: String
end

m = MongoTest.new
m.fields.keys
 => ["_id", "abc", "def"]

MongoTest.class_eval { undef :abc, :abc= }
m.fields.keys
=> ["_id", "abc", "def"] 

但是undef实际上确实取消了该方法的可调性:

m.abc
NoMethodError: undefined method `abc' for #<MongoTest _id: 554013e86d61632f57000000, abc: nil, def: nil>

我有点困惑为什么这个方法仍然出现。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您应该首先使用static字段,而不是在模型上定义dynamic字段并尝试在运行时删除它们。

要使用dynamic字段,您必须add the following line to your model

include Mongoid::Attributes::Dynamic

根据this question,您需要在allow_dynamic_fields: true

中设置mongoid.yml