Rails4なのにMassAssignに関するエラーが出た理由
症状
Rails4 + Devise + Omniauthを使って認証機能なんかを作っていたのですが、何故かMassAssignに関するエラーが出てしまい、新規ユーザーのレコードが保存できない事態に陥ってしまいました。
WARNING: Can't mass-assign protected attributes for User: name, password
Rails4ではコントローラ側のStrongParametersでユーザーレコードの更新に使用するParameterを許可するはずで、なんでだー!Model側のエラーじゃないかー!と2日くらい悩んでいたのですが、理由は簡単でした。
理由
じぶんで「protected_attributes」のgemをインストールしていたから。
対策
なので、Gemfileからprotected_attributesを削除し、アンインストール。
反省
- 今回の事態を引き起こした理由
不用意なコピペ
特に意味も確かめずにコピペしていました。これではいけない。自分のコードについて、その意図をすべて説明できるようでなければならない。
- 今後の対策
不用意なコピペをしない、参照先のコードの意図を読み取る。ソースを深く読む。
なんか日本昔ばなしとかでありそうな話だ。思慮の浅い若者が、良かれと思ってとった不用意な行動によって墓穴を掘るみたいな。