Rails の migration で typo に気づかず4時間溶かした話する?(した)[EOF]

1 min読了の目安(約1200字IDEAアイデア記事 2

誰の役にも立たないと思うのですが自戒を込めて。

問題

ALTER TABLE `hoge` ADD CONSTRAINT fk_hoge FOREIGN KEY (`foo`) REFERENCES `fuga` (`bar`);

っていう外部キー制約追加のクエリは通るのに

add_foreign_key :hoge, :fuga, colmun: :foo , primary_key: :bar, name: :fk_hoge

っていう migration が
Key column 'fuga_id' doesn't exist in table っていうエラーに弾かれて
4時間悩みました。

原因

×

add_foreign_key :hoge, :fuga, colmun: :foo , primary_key: :bar, name: :fk_hoge

add_foreign_key :hoge, :fuga, column: :foo , primary_key: :bar, name: :fk_hoge

わかりましたか?

……。

×

colmun

column

私はこれに気づくまでに
ActiveRecord のソースコードを追うところまでやりました……。

Key column 'fuga_id' doesn't exist in table って言われてるんだから
fuga_id を探しにいくような挙動をする部分
= 外部キーを貼るテーブルのカラム指定のあたり、って気づくべきでしたね……。

こういう動的型付け言語の typo ってみなさんどうやって戦ってるんでしょうか。
linter(rubocop) とかですかね……。

参考

ここまで追いかける必要もないのに……。