如何生成一个模型,其表存储在不同的数据库中?

时间:2015-02-05 14:36:44

标签: ruby-on-rails database-design

我使用的应用程序使用三个不同的数据库。我想创建一个模型并将其表存储在一个特定的数据库中,该数据库不是默认的 appname_development 数据库。如何告知rails生成器在何处为此模型创建数据库表?

2 个答案:

答案 0 :(得分:1)

简而言之:你做不到。您无法告诉模型生成器使用哪个数据库来创建表(开箱即用)。

您需要自己更改生成的迁移,以使用establish_connection定位所需的数据库。类似的东西:

conn = ActiveRecord::Base.establish_connection(:"which_db_#{Rails.env}")
conn.create_table :my_table do |t|

而不是为您生成的create_table通常调用。

您还需要将establish_connection电话添加到任何模型。


但是,您可以提供自己的模板来生成迁移和模型,以便为任何生成的模型添加这些行。 generators guide中有更多详细信息,但您应该能够提供文件版本以生成模型和迁移。然后,您必须对rails generate上传入的变量做出反应,以指定要使用的数据库。可能有点繁琐,但如果你要在不同的地方生成很多模型,可能是值得的。

答案 1 :(得分:0)

您可以使用establish_connection方法。

class SomeClassInDb1 < ActiveRecord::Base
  establish_connection "db_1_#{Rails.env}"
end


class SomeClassInDb2 < ActiveRecord::Base
  establish_connection "db_2_#{Rails.env}"
end

并在您的config / database.yml

development:
  # your normal db settings

db_1_development:
  # config for db 1 in development env

db_2_development:
  # config for db 2 in development env

db_1_test:
  # config for db 1 in test env
db_2_test:
  # config for db 2 in test env

db_1_production:
  # config for db 1 in production env

db_2_production:
  # config for db 2 in production env