0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails初学者】不要になったカラム(memo_id)を削除したのにエラーが出続けた話とその解決法

Posted at

【Rails初学者】不要になったカラム(memo_id)を削除したのにエラーが出続けた話とその解決法

はじめに

Railsで開発中、テーブル設計の変更により、memo_id カラムを visits テーブルから削除しました。
しかし、その後もなぜか memo_id を参照しようとして PG::UndefinedColumn エラーが出続けてしまいました。

こちらの記事は、自分の備忘録として、実際にハマった原因と、その解決方法をまとめます。


起きたこと

  1. 初期設計で、visits テーブルには memo_id(外部キー)カラムが存在していた
  2. 設計見直しにより、memo は単なる text カラムとして visits.memo に直接保存するように変更
  3. 以下のマイグレーションで memo_id を削除
class RemoveMemoIdFromVisits < ActiveRecord::Migration[8.0]
  def change
    remove_column :visits, :memo_id, :integer
  end
end
  1. 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_paramsmemo_idはなし
  • ビューにもf.hidden_field :memo_idのような記述なし
  • モデルにbelongs_to :memoもなし

原因②:test/fixtures/visits.ymlmemo_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も忘れずにチェックする。


初学者のため、間違えていたらすいません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?