これに遭遇する別のケースは、カスタムの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にこのようなものを追加します。私の解決策について
# 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
注:
- 私はので
PostgreSQLAdpater
の有無をチェックしています私が使用している静的解析の宝石は、いくつかのAR依存性を部分的にロードします。具体的には、宝物annotate
です。
- 元の定義のソースis here。この中に私のランニングに
背景:これはレールの5.0.xで私に起こった、移行は細かい走ったが、db:test:prepare
またはdb:reset
を実行しようとすると、その後私のテスト環境では失敗します。これをスキーマダンプの問題にまで追跡するのにかなり時間がかかりました。
ここでの質問への答えが見つかりました: http://stackoverflow.com/questions/383058/rails-schema-creation-problem –
はそれも、あなた自身の質問への答えを書き出すために他の人に便利だし、受け入れ。それはまた、未回答のリストからこの質問を取り除く。 – Nick