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

发布于 2024-11-05 19:54:30 字数 445 浏览 0 评论 0原文

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

我曾经这样做过:

SomeClass.childclass.find_or_create_by({:key => "value"}, 继承子类)

现在我收到一个异常,说参数太多(2 for 1) 在 .find_or_create_by 上。

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

任何帮助表示赞赏。

谢谢。

in previous released of Mongoid (2.0.beta.20), I could pass a class type as the
2nd parameter of the .find_or_create_by block on embedded document collections.
this doesn't appear to be the case any more, with v2.0.1, yet I still
need to do polymorphic find_or_create_by. any suggestions / pointers
on how to do this?

I used to do this:


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

now I get an exception saying too many arguments (2 for 1)
on .find_or_create_by.

how can I tell the collection to create an object of the correct type, when using find_or_create_by? Or, how can i create my own method that will be functionaly equivalent to what I want, and be re-usable across my embedded document collections?

any help is appreciated.

thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

若能看破又如何 2024-11-12 19:54:30

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

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

I ended up rolling my own solution for this

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
暖树树初阳… 2024-11-12 19:54:30

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

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

Not sure I really understood your need to inform the subclass, but check this gist: https://gist.github.com/960684

I do search subclass instances without needing to inform it. Perhaps your scenario really needs it, but if it does, why don't you call subclass's find_or_create_by?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文