Tôi có một thư viện schema_utils mà tôi sử dụng và có phương pháp sau để xử lý việc di chuyển:
def self.with_schema(schema_name, &block)
conn = ActiveRecord::Base.connection
old_schema_search_path = conn.schema_search_path
conn.schema_search_path = schema_name
begin
yield
ensure
conn.schema_search_path = old_schema_search_path
end
end
Sau đó, tôi sử dụng di chuyển như bình thường để có thể tiếp tục gọi rake:migrateNow, trong di chuyển của mình, bạn có thể sử dụng:
...
schemas.each do |schema|
SchemaUtils.with_schema(schema) do
#Put migration code here
#e.g. add_column :xyz, ...
end
end
Bởi vì tôi có xu hướng ánh xạ lược đồ với mã tài khoản, tôi làm như sau:
Account.for_each do |account|
SchemaUtils.with_schema(account.code) do
#Put migration code here
end
end