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

时间:2011-02-03 08:01:02

标签: ruby-on-rails activerecord mongodb mongomapper

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

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

我需要什么:

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

所以我必须:

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

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

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

    感谢。

1 个答案:

答案 0 :(得分:1)

是的,这可以做到。

要创建多态关联,您需要类和ID。通过惯例,字段将命名为<assoc>_type<assoc>_id 。您需要进行一些连线以使一切正常。

  1. 使用正确类型的键<assoc>_type<assoc>_id创建一个MongoMapper :: Document类(我相信MongoMapper允许Class作为键类型)以及您可能使用的任何其他键需要。
  2. 定义方法<assoc><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. 可能会向ActiveRecord模型添加一个方法,允许他们访问MongoMapper日志记录类。如果有很多,您可能需要构建一个模块并将其包含在需要这种功能的所有类中。

  4. ‡替换为“参考”或“主题”等应用程序有意义的内容