Rails 3 一个 MongoMapper 模型和一个/多个 Active Record 模型之间的多态关联

发布于 2024-10-15 07:54:35 字数 400 浏览 1 评论 0原文

我有一个记录模型(Active Record),它存储一些自定义日志。

Record 与我的应用程序中的所有其他模型具有多态关联,我可以有效地记录我想要的内容,在其他控制器中挂钩我的 Record 方法。

我需要什么:

将日志保存在单独的数据库中。

所以我必须:

  1. 能够在我的应用程序中管理两个不同的数据库(一个是 Postgres/ActiveRecord,另一个是 MongoDB/MongoMapper)

  2. 在我的 Record 模型(现在使用 MongoMapper)和我的其余 Active Record 模型之间生成多态关联。

这样我就可以将日志保存到 MongoDB 数据库中。

谢谢。

I have a Record model (Active Record) that stores some custom logs.

Record is in polymorphic association with all the other model in my app, and I can effectively log what I want hooking my Record methods in the other controllers.

What I need:

To have the logs in a separate database.

So I have to:

  1. Be able to manage two different databases in my apllication (one is Postgres/ActiveRecord and the other one is MongoDB/MongoMapper)

  2. Generate a polymorphic association between my Record model, now with MongoMapper, and the rest of my Active Record models.

That way I can persist my logs to the MongoDB database.

Thanks.

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

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

发布评论

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

评论(1

合约呢 2024-10-22 07:54:35

是的,这是可以做到的。

要创建多态关联,您需要类和 ID。通常,这些字段将命名为 _type_id。您需要进行一些接线才能使一切正常工作。

  1. 使用正确类型的键 _type_id 创建一个 MongoMapper::Document 类(我相信 MongoMapper 允许 Class code> 作为密钥类型)以及您可能需要的任何其他密钥。
  2. 定义方法=

    def 关联
      assoc_type.find(assoc_id)
    结尾
    
    def assoc=(输入)
       assoc_type = input.class #STI 使事情变得更加复杂,我们必须存储基类
       asspc_id = 输入.id
    结尾
    
  3. 可能向 ActiveRecord 模型添加一个方法,允许它们访问你的 MongoMapper 日志记录类。如果有很多,您可能需要构建一个模块并将其包含在需要此类功能的所有类中。

‡ 替换为对您的应用程序有意义的内容,例如“参考”或“主题”

Yes this can be done.

To create a polymorphic association you need both the class and an id. Idiomatically the fields will be named <assoc>_type and <assoc>_id. You will need to do some wiring up to make everything work.

  1. Create a MongoMapper::Document Class with the keys <assoc>_type and <assoc>_id with the correct types (I believe MongoMapper allows Class as a key type) along with any other keys you may need.
  2. Define the method <assoc> and <assoc>=

    def assoc
      assoc_type.find(assoc_id)
    end
    
    def assoc=(input)
       assoc_type = input.class #STI makes this more complicated we must store the base class
       asspc_id = input.id
    end
    
  3. Possibly add a method to your ActiveRecord models allowing them to access you MongoMapper logging class. If there are a lot, you may want to build a module and include it in all the classes that need that kind of functionality.

‡ replace with something meaningful for you application like 'reference' or 'subject'

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