🤮
Rails の migration で typo に気づかず4時間溶かした話する?(した)[EOF]
誰の役にも立たないと思うのですが自戒を込めて。
問題
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) とかですかね……。
参考
ここまで追いかける必要もないのに……。
- Rails RDoc
- rails/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb | GitHub
Discussion
これは気づかないですねー笑
linterで検出してくれない部分については「気をつける」以外なさそうな…?
@catnose さん
コメントありがとうございます。
そうなんです😂 何度も何度も確認してヨシ!となったはずなのですが結局typoでした……