読者です 読者をやめる 読者になる 読者になる

あんパン

こしあん以外は認めない

Ridgepoleでfk設定するときはnameが必要

Rails

$ rails g model Hoge fuga:references
$ rake db:migrate
$ rm -rf db/migrate

みたいな感じでモデル新規作成時だけ一旦マイグレーションファイル作ってからRidgepoleのSchemafileにdumpして… みたいな運用してたら詰まった.

ActiveRecordのreferencesはadd_foreign_key "hoge", "fugas"みたいな感じで名前を設定しないので,このままdumpするとSchemafileにも名前なしの外部キーが出力される.これをDBにapplyしようとすると

Apply `db/schemas/Schemafile`
[ERROR] Foreign key name in `hoge` is undefined
rake aborted!
Command failed with status (1): [bundle exec ridgepole -Edevelopment -c con...]
...

みたいな感じでエラーを吐く.修正するには

  1. db/schema.rbのfkに名前を設定
  2. Schemafileのfkに名前を設定
  3. $ rake db:resetとか実行しておく

みたいなことすればよさそう.

ちゃんと名前を設定しようという話でした.


外部キー詳しくないまま使ってるのだけど,Ridgepoleで名前の設定を強制させる理由ってなんだろう.Rails側が無名で出力できるんだからわざわざraiseすることなくてwarnとかでとどめておけば良いのに.