私は、スキーマ内で定義された多くの制約を使用するデータベースを扱っています。これは、データベースを使用する他のサービスやクライアントがデータモデルを破壊しないようにするために必要です(このレベルのDB定義がRailsアプリケーションには不適切であると返信しないでください)。残念ながら、これは、誰かが私が逃したことを知っていない限り、Railsはスキーマの定義、ダンプ、その後の再作成の能力を超えているようです。Rails add_foreign_keyが単一の参照フィールドに限定されています
私が遭遇した特定の問題はschema.rbでadd_foreign_key
文であり、そして私は誰もがschema.rb定義に直接SQLを埋め込む私を保存します回避策を知っているかどうかを確認するために探しています。
PostgresのDDLは次のとおりです。
add_foreign_key "trackers", "sub_processes",
column: "protocol_id",
primary_key: "protocol_id",
name: "valid_protocol_sub_process"
この結果:
ALTER TABLE ONLY trackers
ADD CONSTRAINT valid_protocol_sub_process
FOREIGN KEY (protocol_id, sub_process_id)
REFERENCES sub_processes(protocol_id, id) MATCH FULL;
残念ながら、私はschema.rbこれは以下になりに、既存のデータベースをrake db:schema:dump
とき無効な指定で、データベースを再作成するときに、単一のフィールドのみを含み、結果としてスキーマ制約が正しくないため実行できません。
私は必要なSQLに一致するように両方のフィールドを含めるようにPRIMARY_KEYと列オプション文字列を変更しようとしているが、ActiveRecordのは、SQL文が無効作り、全体の多くの前後に引用符を置きます。私も列の配列を使用しようとしましたが、それはちょうど#to_s
配列に表示されます。
これはちょうどadd_foreign_key
の能力を超えているのですか、または外部キー仕様で複数のフィールドを使用する方法がありますか?