我想在除了database.yml文件中定义的数据库之外的另一个数据库中创建新表。
这是我的database.yml文件:
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: main_development
pool: 5
username: root
password:
socket: /var/run/mysqld/mysqld.sock
test:
adapter: mysql2
encoding: utf8
reconnect: false
database: main_test
pool: 5
username: root
password:
socket: /var/run/mysqld/mysqld.sock
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: main_prod
pool: 5
username: root
password:
socket: /var/run/mysqld/mysqld.sock
我有另一个名为“peripheral”的数据库,我想在其中创建一个名为“retailer_to_domain”的表。
这是我的迁移文件:
class CreateRetailerToDomains < ActiveRecord::Migration
def connection
ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:encoding => "utf8",
:reconnect => false,
:database => "peripheral",
:pool => 5,
:username => "root",
:password => "",
:socket => "/var/run/mysqld/mysqld.sock").connection
end
def change
ActiveRecord::Base.connection.create_table :retailer_to_domains do |t|
t.string :name
t.string :domain
t.timestamps
end
end
end
迁移文件是通过命令生成的:
rails generate model RetailerToDomain name:string domain:string
,然后我添加了def connection
方法来覆盖database.yml配置中的默认数据库("main")。当我运行迁移(
rake db:migrate
)时,retailer_to_domains表会在main_development数据库中创建。如何覆盖此默认设置以使迁移在我想要的位置创建表?此外,我希望RetailerToDomain模型可以通过类似以下方式的establish_connection方法访问此表:
class RetailerToDomain < ActiveRecord::Base
establish_connection(
:adapter => "mysql2",
:encoding => "utf8",
:reconnect => false,
:database => "peripheral",
:pool => 5,
:username => "root",
:password => "",
:socket => "/var/run/mysqld/mysqld.sock")
self.table=retailer_to_domain
validates_presence_of :name, :domain
end
提前感谢您在这里提供的任何想法!
test
环境中遇到了一个问题,在那里establish_connection
没有被“记住”(或者该怎么说)。connection_config
显示更改后的数据库,但查询却使用了“主”数据库。我在这个问题https://stackoverflow.com/a/74239737/1526010上发布了一个答案。我认为这里的问题并不完全是我的问题。但非常感谢!它给了我一个解决方法的提示,我认为不需要像这样做,但它确实有效... - 244an