ActiveRecord::Migration - 引用另一个架构中的表

发布于 2024-12-07 03:40:04 字数 1375 浏览 1 评论 0原文

我使用 Ruby 和 PostgreSQL,并创建了 3 个不同的数据库模式:billing(用于计费相关数据)、customer(用于客户相关数据)和 edocs(用于电子文档相关数据)。 我没有使用 Rails,所以我有一个像这样的独立迁移代码:

#migrate.rb

if ARGV[0] =~ /VERSION=\d+/
  version = ARGV[0].split('=')[1].to_i
else
  version = nil
end

ActiveRecord::Base.default_timezone           = :utc
@logger                                       = Logger.new $stderr
ActiveRecord::Base.logger                     = @logger
ActiveSupport::LogSubscriber.colorize_logging = false
@config                                       =     YAML.load_file(File.join(File.dirname(__FILE__), 'database.yml'))

ActiveRecord::Base.establish_connection(@config["edocs"])
ActiveRecord::Migrator.migrate(".", version)

我已经意识到我可能必须创建一个不同的目录来包含不同模式的迁移,并更改每个 migrate.rb 的连接信息。

但我不确定如何使一个表引用另一个模式中的另一个表。 例如:

class CreateBillingEventsTable < ActiveRecord::Migration

 def self.up
   create_table :billing_events do |t|
     t.references :customer, :null => false
     t.references :service_type, :null => false
     t.timestamps
   end
   change_table :billing_events do |t|
     t.index [:customer_id, :created_at]
   end
 end

 def self.down
   remove_index :billing_events, :column => [:customer_id, :created_at]
   drop_table :billing_events
 end

end

在上面的示例中,“customer”和“billing_events”位于不同的架构中。 我该如何编码?

谢谢。

I'm using Ruby and PostgreSQL and have created 3 distinct DB schemas: billing (for billing related data), customer (for customer related data) and edocs (for electronic documents related data).
I'm not using Rails so I have a stand-alone migration code like this:

#migrate.rb

if ARGV[0] =~ /VERSION=\d+/
  version = ARGV[0].split('=')[1].to_i
else
  version = nil
end

ActiveRecord::Base.default_timezone           = :utc
@logger                                       = Logger.new $stderr
ActiveRecord::Base.logger                     = @logger
ActiveSupport::LogSubscriber.colorize_logging = false
@config                                       =     YAML.load_file(File.join(File.dirname(__FILE__), 'database.yml'))

ActiveRecord::Base.establish_connection(@config["edocs"])
ActiveRecord::Migrator.migrate(".", version)

I have already realized that I probably have to create a different directories to contain the migration for the different schemas, and changing connection info for each migrate.rb.

But I'm not sure how I'm going to make a table reference another table that is in another schema.
For example:

class CreateBillingEventsTable < ActiveRecord::Migration

 def self.up
   create_table :billing_events do |t|
     t.references :customer, :null => false
     t.references :service_type, :null => false
     t.timestamps
   end
   change_table :billing_events do |t|
     t.index [:customer_id, :created_at]
   end
 end

 def self.down
   remove_index :billing_events, :column => [:customer_id, :created_at]
   drop_table :billing_events
 end

end

In the above example, "customer" and "billing_events" are in different schemas.
How can I code that?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文