ActiveRecord_Associations_CollectionProxy カラムの名前が競合しました。

似たような名前というのはややこしいものです。
横山健と横山剣、みたいな。
それはプログラミングの世界においては、しばしばエラーの種となります。

今回はRailsアプリでいつの間にやらUserモデルが更新できなくなっちゃったお話。

ユーザーを更新しようとするとupdateで

NoMethodError in UsersController#update
undefined method `each' for #

なにやら、こんなエラーが出る。

そしてUserのメモ欄に

ActiveRecord_Associations_CollectionProxy

こういうエラー文が保存されていた。

ググってもあまり情報がなかったんだけど、メモ・・・メモ・・・待てよ・・・とよくよく考えたら、さきほどMemoモデル(Userモデルと1対多)を追加したのだった。これが原因っぽい。

たぶん、Userモデルとアソシエーション関係にあるMemoモデルを追加したことで、Userモデルの中のmemoカラムとMemoモデルが競合しちゃったのだと思います。

というわけで、Userモデルのカラム名をmemoからuser_memoに変更してみる。

エラー消えた!更新できた。

はい、一件落着。

公開日