Musíte přejít z db/schema.rb na db/structure.sql .
Základní problém je v tom, že schema.rb je reprezentace struktury databáze tak, jak ji vidí ActiveRecord, ale ActiveRecord nerozumí mnoha věcem (například create type , ZKONTROLUJTE omezení a další věci, které se zobrazují v execute some_raw_sql příkazy při migracích), které PostgreSQL dělá. Můžete create type vše, co chcete, kromě schema.rb to nikdy neuvidí.
Pokud chcete používat věci, kterým ActiveRecord nerozumí, musíte použít db/structure.sql pro uložení struktury databáze. structure.sql ukládá strukturu databáze tak, jak ji databáze rozumí, nikoli tak, jak ji chápe ActiveRecord.
Přepínání je snadné:
- Aktualizujte
config/application.rbobsahovatconfig.active_record.schema_format = :sql. - Proveďte
rake db:structure:dumpzískat počátečnídb/structure.sql. - Smažte
db/schema.rbz vašeho adresářového stromu a kontroly revizí. - Přidejte
db/structure.sqlke kontrole revizí. - Upravte své rake návyky:
- Použijte
db:structure:dumpmístodb:schema:dump - Použijte
db:structure:loadmístodb:schema:load
- Použijte
To znamená, že si nejsem jistý, jak dobře je nativní enum PostgreSQL typy budou komunikovat s ActiveRecord, jak jsem to nikdy nedělal. enum AR s
jsou překladem na straně klienta mezi řetězci a celými čísly, ale enum s
jsou zpracovávány uvnitř databáze a navzájem o sobě nevědí. Může dojít ke konfliktům a budete si muset být jisti, že je budete vzájemně synchronizovat.