多态.find_or_create_by与mongoid 2.0.1,嵌入式文档集合?

时间:2011-05-07 17:09:00

标签: ruby-on-rails ruby-on-rails-3 inheritance polymorphism mongoid

在之前发布的Mongoid(2.0.beta.20)中,我可以传递一个类类型作为 嵌入式文档集合上.find_or_create_by块的第二个参数。 这似乎不再是这种情况,使用v2.0.1,但我仍然如此 需要做多态find_or_create_by。任何建议/指针 如何做到这一点?

我曾经这样做过:

SomeClass.childclass.find_or_create_by({:key => "value"}, InheritingChildClass)

现在我得到一个例外,说太多参数(2对1) 在.find_or_create_by。

使用find_or_create_by时,如何告诉集合创建正确类型的对象?或者,我如何创建自己的方法,该方法与我想要的功能相同,并且可以在我的嵌入式文档集中重复使用?

感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

我最终为此推出了自己的解决方案

module Mongoid::Relations
  class Many
    def find_or_new(attrs, type, &block)
      inst = self.where(attrs).first

      unless inst
        inst = type.new
        inst.write_attributes attrs
        self << inst
      end

      inst
    end
  end
end

答案 1 :(得分:0)

不确定我是否真的理解你需要通知子类,但请检查这个要点:https://gist.github.com/960684

我会搜索子类实例而无需通知它。也许您的场景确实需要它,但如果确实如此,为什么不调用子类的find_or_create_by?