我正在尝试动态地向MongoMapper文档添加密钥。

def build(attrs={})
  doc = self.new
  apply_scope(doc)
  doc.set_up_keys!
  doc.attributes = attrs
  doc
end

def set_up_keys!
  return unless form

  form.fields.each do |f|
    next if self.keys.include?(f.underscored_name)

    self.class.send(:key, f.underscored_name, f.keys['default'].type, :required => f.required, :default => f.default)
  end
end

有问题的代码可以使用herehere
form是一个相关模型。我想根据form#fields的特性在当前模型(self)上创建关键点。
问题是,如果我创建两个模型,它们都具有来自两个模型的相同键。
self.class.send(:key...)将键添加到模型中。
为什么要将它们添加到这两个模型中?
是因为方法是在类上下文中调用的吗?
如何仅影响单个实例?

最佳答案

Mongomapper按其类定义模型这个类的所有实例都共享模型的键如果要动态创建模型,可能需要dynamically create a class,并向其添加关键点:

def build(attrs={})
  c = Class.new(self.class)
  doc = c.new
  apply_scope(doc)
  doc.set_up_keys!
  doc.attributes = attrs
  doc
end

关于ruby - 使用MongoMapper进行Ruby元编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21853671/

10-09 21:18