2014-11-16 57 views
0

ActiveRecord的车型我都内置了Rails 3的一个旧的应用程序使用的MongoDB数据库(Mongoid作为适配器)。访问从MongoDB的应用

我将它移动到Rails 4并使用MySQL。我的计划是通过脚本将集合映射到自己的表中并复制数据。我很喜欢做那部分。我不知道如何连接到MySQL数据库。

我已经在Rails 4和新的数据库中创建了新的应用程序,例如,映射到MongoDB中的集合的Contacts的表。我想要做的是在Mongo中查找所有联系人,然后连接到MySQL DB并将记录插入表中。

我该怎么做最后一部分?

感谢

罗宾

回答

0

我设法做到这一点,如下所示。

1)在新应用程序中创建数据库模式。在这个阶段,我不担心关联,因为我会手动设置关联ID。

2)在一个文件I在旧的应用程序称为transition.rb,我定义迁移类每个类的我想传送例如

class NewProduct < ActiveRecord::Base 

    file = File.open("#{Rails.root}" + "/config/database.yml") 
    dbconfig = YAML::load(file) 
    establish_connection(dbconfig["development"]) 
    self.table_name = "products" 

end 

通过添加mysql2宝石老MongoDB的应用程序,我可以使用这个模式来连接在相关表格:该类Product,我使用下面的模式定义了一个名为NewProduct过渡分类新应用程序。

3)对于每个类,我然后迭代现有记录,通过迁移类将它们映射到新表。 MySQL没有可用于直接映射的列在MySQL中没有Array列类型。对于这些情况,我创建了一个单独的类并手动创建关联。

有一定的试验和错误的某些部分,但总体上已经做得很不错。我无法以编程方式完成的唯一部分是将上传的图像和文档关联到相关产品,但由于这些上传的文件命名结构,因此创建关联不需要大量手动工作。

对于那些有兴趣谁this is the gist of the file I used