另一種情況下,有人可能會遇到這種情況是將自定義postgres類型(枚舉)插入postgresql時。如果有人這樣做,仍然想爲您的schema.rb使用Ruby,則可以將自定義數據庫類型添加到適配器的有效類型列表中。
例如,假設您有這樣的遷移,其中address_type
和address_status
。
class CreateAddresses < ActiveRecord::Migration
def up
execute <<-SQL
CREATE TYPE address_status AS ENUM ('active', 'archived');
CREATE TYPE address_type AS ENUM ('billing', 'shipping');
SQL
create_table :customer_addresses do |t|
# bla bla
t.column :address_type, :address_type
t.column :status, :address_status
t.timestamps null: false
end
end
def down
drop_table :customer_addresses
execute <<-SQL
DROP TYPE address_type;
DROP TYPE address_status;
SQL
end
end
然後在創建初始化或添加這樣的事情你application.rb中:
- 我檢查了
PostgreSQLAdpater
,因爲存在:我的解決方案 # config/initializers/postres_enum_custom_types.rb
module ActiveRecord
module ConnectionAdapters
if const_defined?(:PostgreSQLAdapter)
class PostgreSQLAdapter
NATIVE_DATABASE_TYPES.merge!(
address_status: { name: 'character varying' },
address_type: { name: 'character varying' }
)
end
end
end
end
注意事項我使用的靜態分析寶石的部分方法是加載一些AR相關性 - 特別是寶石annotate
。
- 原始定義的來源is here。
背景上我遇到了這樣:當這發生在我身上的軌道5.0.x中的遷移運行正常,但隨後試圖運行db:test:prepare
或db:reset
在我的測試環境將失敗。我花了相當長的時間來跟蹤這個模式轉儲問題。
找到了問題的答案在這裏: http://stackoverflow.com/questions/383058/rails-schema-creation-problem –
這是幫助他人寫出來的答案,甚至是你自己的問題,接受。它也從沒有答案的列表中拿掉這個問題。 – Nick