Innym przypadkiem, w którym ktoś może się na to natknąć, jest wstawianie niestandardowych typów postgresów (wyliczeń) do postgresql. Jeśli to się robi i nadal chce używać Ruby do swojego schematu.rb, możesz dodać niestandardowe typy baz danych do listy poprawnych typów adaptera.
Na przykład, powiedzmy, że masz migrację podobną do tej z address_type
i 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
Następnie w stworzenie inicjator lub dodać coś takiego do environment.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
Uwagi o moim roztwór:
- jestem sprawdzanie istnienia
PostgreSQLAdpater
ponieważ sposobu, w jaki klejnot do analizy statycznej, którego używam, częściowo ładuje niektóre zależności AR - szczególnie klejnot annotate
.
- Źródło oryginalnej definicji is here.
tło na moim komputerze jest uruchomiona na to: Kiedy to się stało ze mną w Rails 5.0.x, migracje pobiegł w porządku, ale potem moje środowisko testowe nie powiedzie się podczas próby uruchomienia db:test:prepare
lub db:reset
. Zajęło mi trochę czasu, aby śledzić to do problemu schema dump.
znaleźć odpowiedź na pytanie tutaj: http://stackoverflow.com/questions/383058/rails-schema-creation-problem –
Jest to pomocne dla innych, aby napisać odpowiedź nawet własne pytanie Zaakceptuj to. To również bierze tę kwestię z listy bez odpowiedzi. – Nick