2017-05-26 28 views
0

我使用Rails 5.0.2,Postgresql作为数据库并使用Heroku Connect将数据与salesforce同步。如何检查在Ruby on Rails迁移中是否存在架构

当创建应用程序的表时,我已经有了公共模式,但Heroku Connect在同一个数据库salesforce的表上写入。我需要在salesforce模式表中添加一个字段。

我发现了方法schema_exists? (https://apidock.com/rails/ActiveRecord/ConnectionAdapters/PostgreSQL/SchemaStatements/schema_exists%3F),但我不知道如何实现它,我是新的RoR。

这是我的移民代码:

class CreateSchema < ActiveRecord::Migration[5.0] 
     def change 
    if !schema_exists?('salesforce') 
     execute "CREATE SCHEMA salesforce" 
    end 
    if !table_exists?('salesforce.ontap__order__c') 
     create_table 'salesforce.ontap__order__c' 
    end 
    add_column :'salesforce.ontap__order__c', :currencyisomode, :string 
    if !table_exists?('salesforce.ontap__order_item__c') 
     create_table 'salesforce.ontap__order_item__c' 
    end 
    add_column :'salesforce.ontap__order_item__c', :currencyisomode, :string 
    end 
end 

什么,我做错了什么?

回答

0

我不知道你遇到什么问题,但是这应该工作:

class CreateSchema < ActiveRecord::Migration[5.0] 
    def up 
    unless schema_exists?('salesforce') 
     execute "CREATE SCHEMA salesforce" 
    end 
    unless table_exists?('salesforce.ontap__order__c') 
     create_table 'salesforce.ontap__order__c' 
    end 
    add_column :'salesforce.ontap__order__c', :currencyisomode, :string 
    unless table_exists?('salesforce.ontap__order_item__c') 
     create_table 'salesforce.ontap__order_item__c' 
    end 
    add_column :'salesforce.ontap__order_item__c', :currencyisomode, :string 
    end 

    def down 
    if schema_exists?('salesforce') 
     drop_table 'salesforce.ontap__order_item__c' 
     drop_table 'salesforce.ontap__order__c' 
     execute('drop schema salesforce') 
    end 
    end 
end 

我已经重构了变化方法分为2种方法(执行当您运行耙分贝:迁移)和下载(在运行rake db:rollback时执行)。