我希望能够动态地取消定义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>
我有点困惑为什么这个方法仍然出现。我做错了什么?
答案 0 :(得分:1)
您应该首先使用static
字段,而不是在模型上定义dynamic
字段并尝试在运行时删除它们。
要使用dynamic
字段,您必须add the following line to your model:
include Mongoid::Attributes::Dynamic
根据this question,您需要在allow_dynamic_fields: true
mongoid.yml