higan96技術メモ

https://github.com/higan96

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を削除し、アンインストール。

反省
  • 今回の事態を引き起こした理由

不用意なコピペ
特に意味も確かめずにコピペしていました。これではいけない。自分のコードについて、その意図をすべて説明できるようでなければならない。

  • 今後の対策

不用意なコピペをしない、参照先のコードの意図を読み取る。ソースを深く読む。


なんか日本昔ばなしとかでありそうな話だ。思慮の浅い若者が、良かれと思ってとった不用意な行動によって墓穴を掘るみたいな。