Mongoid和Postgres脚手架/关系

Par*_*ris 3 postgresql activerecord ruby-on-rails mongodb mongoid

我需要某个模型来包含对文档的引用.大部分模型都可以存储在postgres中.该模型适用于游戏中的"关卡".我想将级别数据本身存储在文档中,这比在sql中创建复杂树更有意义.

我可以使用安装了mongoid的postgres; 然而,在安装mongoid gem之后,我似乎只能够构建mongoid(非活动记录)文档.

问题是我有其他表的引用,我不知道如何在mongoid模型中链接它.

问题:

  1. 如何强制脚手架与活动记录而不是mongoid一起发生,反之亦然. 编辑:部分回答:在Mongoid安装后使用Active Record生成器?(第二个答案有效,但我不知道如何轻松往返)

  2. 有没有一种简单的方法可以从活动记录模型中引用文档(我知道文档说不要混合它们,但它是我想要做的事情的理想选择).

  3. 如果无法混合它们,那么我应该如何从postgres/active记录表中引用文档.换句话说,如何同时获取两个数据?

谢谢!

Tyl*_*ock 7

关于你的第一个问题,理想的解决方案将与参考文章中的第一个答案一致.但是,不是生成迁移,而是生成模型.因此,当您想要一个Active Record模型时,只需运行:

rails g active_record:model
Run Code Online (Sandbox Code Playgroud)

至于你的第二个和第三个问题,要将Active Record模型与Mongoid文档相关联,只需将ObjectId存储为模型中的字符串.然后,当您获取检索记录时,从字符串中生成一个新的ObjectId并使用它来查询相关文档.

您可以使用以下方法从字符串中创建对象ID:

BSON::ObjectId.from_string("object_id_string")
Run Code Online (Sandbox Code Playgroud)

在ActiveRecord和Mongoid之间进行混合和匹配时,没有一种简单的方法可以轻松地遵循内部关系,但我担心必须通过Ruby代码完成.

您在rails中定义的模型要么扩展一个ORM的基类,要么扩展另一个,并且它们彼此不了解.可能有一些项目作为这些ORM之上的一层,但我不熟悉目前存在的任何项目.