2017-05-26 70 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時執行)。