【Rails初学者】不要になったカラム(memo_id)を削除したのにエラーが出続けた話とその解決法
はじめに
Railsで開発中、テーブル設計の変更により、memo_id カラムを visits テーブルから削除しました。
しかし、その後もなぜか memo_id を参照しようとして PG::UndefinedColumn エラーが出続けてしまいました。
こちらの記事は、自分の備忘録として、実際にハマった原因と、その解決方法をまとめます。
起きたこと
- 初期設計で、
visitsテーブルにはmemo_id(外部キー)カラムが存在していた - 設計見直しにより、
memoは単なるtextカラムとしてvisits.memoに直接保存するように変更 - 以下のマイグレーションで
memo_idを削除
class RemoveMemoIdFromVisits < ActiveRecord::Migration[8.0]
def change
remove_column :visits, :memo_id, :integer
end
end
-
schema.rbからもmemo_idは削除されたことを確認
それでも出続けたエラー
PG::UndefinedColumn: ERROR: column "memo_id" of relation "visits" does not exist
LINE 1: ... "has_document", "memo_id", ...
memo_idは、もう削除したはずなのに
原因①:フォームやStrong Parametersの残骸
真っ先に疑ったのは、フォームやコントローラ。
-
visit_paramsにmemo_idはなし - ビューにも
f.hidden_field :memo_idのような記述なし - モデルに
belongs_to :memoもなし
原因②:test/fixtures/visits.ymlにmemo_id:が残っていた
確認したところ、これが原因でした
# test/fixtures/visits.yml
one:
user_id: 1
visit_date: 2025-06-20
memo_id: 1 # ← これが残っていた
サーバーを再起動
bin/dev
# または
bin/rails server
まとめ
- カラムを削除したのにエラーが出る場合、
fixtures/*.ymlを見落としがち - Railsは
fixtureを元にカラム情報を推論することがある -
grep memo_idで一括検索すると見逃しを防げる
最後に
開発中もう消したはずのカラムがなぜか参照されるという場合は、
test/fixturesも忘れずにチェックする。
初学者のため、間違えていたらすいません。