如何在 Rails 3 中并行使用 Mongoid 和 ActiveRecord?

2024-05-05

我使用的是 Rails 3,并使用 ActiveRecord 开始我的应用程序。现在,我有很多模型,并且关系开始变得复杂,有些可以用面向文档的结构更简单地表达,所以我想尝试迁移到 MongoDB 并使用 Mongoid。

我一直听说您不必使用所有 MongoDB 或什么都不使用,但您可以在迁移时并行使用两者。但我不知道如何从文档中解决这个问题。

例如,我有:

class User < ActiveRecord::Base
   has_many :items
   has_many :products, :through => :items
end

class Product < ActiveRecord::Base
   has_many :items
end

class Item < ActiveRecord::Base
   belongs_to :user
   belongs_to :product

   # alot of data that fits a hierarchical document-oriented structure
end

理想情况下,我想首先用 Mongoid 文档替换我的 Item activerecord 模型,这样我的项目就存储在 MongoDB 中,而我的项目则存储在 MongoDB 中。Users and Products可以保留在 mySQL DB 中

问题是,我不知道该怎么做。我以正确的方式处理这件事吗?

也许另一种选择是保留基础 AR 物品

class Item < ActiveRecord::Base
   has_one :mongodb_item  ?? # I know this is wrong
end

class MongodbItem
   include Mongoid::Document
   belongs_to AR_Item ???    # I know this is also wrong
end

Thanks!


我所做的只是模拟 AR 模型和 Mongoid 模型中方法的关系,如下所示。

# visit_session.rb
class VisitSession
  include Mongoid::Document
  include Mongoid::Timestamps

  field :user_id, type: Integer
  index({user_id: 1},{name: :user_id_index})

  # Mock a belongs_to relationship with User model
  def user
    User.find(self.user_id)
  end
end

# user.rb
class User < ActiveRecord::Base

  # Mock a has_many relationship with VisitSession Mongoid model
  def visit_sessions
    VisitSession.where(user_id: self.id)
  end
end

当然,您不会拥有 VisitSession Mongoid 模型上的所有 AR 方法,但您至少能够很好地模拟两者之间的关系。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Rails 3 中并行使用 Mongoid 和 ActiveRecord? 的相关文章

随机推荐

  • 如何用 Scala 编写毕达哥拉斯定理?

    直角三角形斜边的平方等于另外两条边的平方和 这就是毕达哥拉斯定理 根据斜边长度 a 和 b 计算斜边的函数将返回 sqrt a a b b 问题是 您如何在 Scala 中定义这样一个函数 使其可以与实现适当方法的任何类型一起使用 对于上下
  • 编写代码以:启动 R 会话、运行 R 脚本、终止会话、重复

    我正在寻找一种简单的 设置后就忘记它 的方式 无论是作为终端中的单个参数字符串还是简单的 Java 程序 来自动执行以下操作 1 启动R会话 2 告诉 R 源 R 文件包含冗长的并行模拟代码 3 完成后终止R会话 4 开始一个新的R会话 5
  • VB6 - Lua 集成

    我想知道是否有人有任何集成 Lua 和 VB6 的技巧 我正在运行一个小型在线角色扮演游戏 添加一些脚本会很棒 嗯 这是可行的 我曾经为 Lua 5 0 2 做过 但找不到文件 在您拥有的选项中 您可以 将 Lua 封装在公开 Lua AP
  • MySQL/Postgres查询5分钟间隔数据

    我需要查询方面的帮助 假设这是表中的数据 timestamp 2010 11 16 10 30 00 2010 11 16 10 37 00 2010 11 16 10 40 00 2010 11 16 10 45 00 2010 11 1
  • 在 WatchKit 和主机 App 中使用具有不同标志的同一文件

    我试图在我的 watchkit 扩展和主机应用程序中使用相同的代码 但在主机应用程序中使用一些附加代码 在 watchkit 扩展中使用一些附加代码 为此 我在各自的目标上添加了 WATCH 和 APP swift 标志 问题是 当我在选择
  • Socket.io 不断重复连接并忽略其他事件

    我正在尝试制作一个网络应用程序 用户可以在其中互相玩环形国际象棋 这是我的 app js 在服务器上 var express require express var app express var http require http Ser
  • 仅使用特定提交消息触发 travis CI 构建

    我希望 travis 仅在我有特定的提交消息时才启动 我怎样才能做到这一点 我的 travis yml 文件是here https github com mosaadm mooltipass blob master travis yml 我
  • 如果表单脏则阻止路由 [ Angular 2 ]

    我被这个挡住了在 Angular 2 中 我需要阻止任何用户单击事件 甚至浏览器刷新 如果页面中的表单为dirty 你能帮我出出主意吗 看来您正在寻找可以停用 https angular io docs ts latest guide ro
  • 当我将 HTML 标签设置为 100% 高度时,我的内容消失了

    我有一个垂直布局 我想保持页面居中 一列保持固定在页面上 而另一列应根据内容滚动 并且有一些绝对的装饰性浮动 div 我希望滚动列垂直显示 100 即使内容不需要高度 但我似乎无法让它工作 我已将 html 标签和 body 标签以及所有必
  • 列表框显示类名称而不是值

    我正在开发一个项目 其中用户应该向动物输入值 名称 年龄 性别等 并且用户输入的值应该显示在列表框中 这些类相互继承 以下是继承的工作原理 Animalclass 是所有类的父类 Mammal类继承自Animal class Dog类继承自
  • 从循环中删除重复项

    我有以下代码 for i in 0 sold length 1 duplicate sold i print duplicate check duplicates print print sold i lotnumber t print s
  • iframe可以弹出Lightbox风格的盒子吗?

    这个问题不是关于在 Lightbox 中弹出 iframe 的问题 而是关于在 Lightbox 中弹出 iframe 的问题 相反 它是关于页面上的 iframe 它可以在页面中启动自己的 Lightbox 样式框contains那个 i
  • Microsoft 开源 .NET 后 CoreCLR 与 Mono 项目的关系

    有人可以向我解释一下 Mono 和 Microsoft 最近提供的开源 Linux 可移植 NET 堆栈 CoreCLR CoreFX Roslyn ASP NET 之间当前的关系吗 很明显这些项目是重叠的 所以我很好奇它们两个的路线图是什
  • 尝试在iPhone上生成随机数,得到相同的数字[重复]

    这个问题在这里已经有答案了 我正在尝试制作一款纸牌游戏 我正在使用以下代码来绘制随机卡 iCard 随机 55 但 icard 总是以 28 开头 似乎它以相同的顺序返回数字 有没有办法在每次第一次调用该函数时获得不同的随机数 random
  • 在mysql查询中对多个日期范围求和

    我有一个 MySql 表 产品 包含三列 Date Product Qty 我的目标是每周对每种产品的数量进行求和 获取两个给定日期之间的 SUM 很容易 SELECT SUM qty FROM products WHERE date gt
  • 创建 .ICS 文件,添加到 Outlook

    我正在创建一个简单的应用程序 允许用户下载 ICS 文件 并将其导入到他们选择的日历应用程序 站点中 我对创建过程感到满意 但对在 Outlook 中打开它们有疑问 将使用C ASP NET进行开发 当我打开一个日历时 它会添加一个新日历
  • 可选函数与抛出函数

    考虑我编写的以下查找函数 该函数使用可选值和可选绑定 如果在字典中找不到键则报告一条消息 func lookUp
  • 从 WMI 运行 exe 时的网络身份验证

    我有一个 C exe 需要使用 WMI 运行并访问网络共享 但是 当我访问共享时 我收到 UnauthorizedAccessException 如果我直接运行 exe 则可以访问共享 我在这两种情况下都使用相同的用户帐户 我的应用程序有两
  • 忽略 php Composer 中的开发依赖项

    我开发了一个基于 Laravel 的作曲家项目 我需要将其安装在远程生产服务器上 问题是我的权限 访问权限有限 所以我的选择是 存档 包 使用composer archive 并在生产时拆包 我需要归档哪些文件夹以及如何忽略包的开发依赖项以
  • 如何在 Rails 3 中并行使用 Mongoid 和 ActiveRecord?

    我使用的是 Rails 3 并使用 ActiveRecord 开始我的应用程序 现在 我有很多模型 并且关系开始变得复杂 有些可以用面向文档的结构更简单地表达 所以我想尝试迁移到 MongoDB 并使用 Mongoid 我一直听说您不必使用