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

How to generate a model, whose table in stored in a different database?

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

您可以使用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

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

您需要使用 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 上传入的变量做出反应,以指定要使用的数据库。可能有点繁琐,但如果您要在不同的地方生成大量模型,这可能是值得的。