我有三个数据库:
每个都在database.yml
我正在使用A
(mynewapp_psql
)作为我的新应用的数据库。在这个应用程序中,我希望能够从我的两个旧数据库中复制所选材料。
我的尝试(根据回复更新)
old_db = ActiveRecord::Base.establish_connection(:database => 'old_blogposts_mysql'... etc)
posts = old_db.connection.execute("select * from posts'")
posts.each do |p|
NewPost.create(:name => p.name.downcase) #NewPost should add Post in A. (mynewapp_psql)
end
它应该从我的旧数据库中获取每个产品,并在新数据库中创建一个新的等效项。
我更喜欢通过控制台进行操作,因为我需要过滤和更改数据,所以无法直接复制数据库。
答案 0 :(得分:3)
所以你的情况是失去联系之一。如何建立与当前数据库的新连接,以便您的代码变为这样
old_db = ActiveRecord::Base.establish_connection(:database => 'old_blogposts_mysql'... etc)
posts = old_db.connection.execute("select * from posts'")
new_db = ActiveRecord::Base.establish_connection(:database => 'mynewapp_psql'... etc)
posts.each do |p|
NewPost.create(:name => p.name.downcase) #NewPost should add Post in A. (mynewapp_psql)
end
答案 1 :(得分:1)
控制台不是动态访问数据库的唯一方法。考虑使用每个数据库的ActiveRecord连接为您的目的定制ruby任务。
require 'pg'
require 'active_record'
ActiveRecord::Base.establish_connection(
adapter: 'postgresql', # or 'mysql2' or 'sqlite3'
host: 'localhost',
database: 'canvas_test',
username: 'joe',
password: 'shiitake'
)
# EXEC raw SQL
ActiveRecord::Base.connection.execute("SELECT * FROM posts;")
class Post < ActiveRecord::Base
end
# READ all posts
puts Post.count
=> #<Post:0xb96582cc>
=> ...
# CREATE one new post
my_post = Post.new