- 公開日:2015年12月01日
記事概要
ActiveModel::ForbiddenAttributesErrorが発生した場合の対応方法を説明した記事です。
環境
- ruby2.2.3
- ruby4.2.4
ActiveModel::ForbiddenAttributesErrorとは
Mass-assignment (モデルの複数属性への一括代入)を防ぐために発生するエラーです。
rails4では、 Strong Parameters を用いて Mass-assignment に対応します。
ActiveModel::ForbiddenAttributesErrorが発生するコード
以下にサンプルのコントローラーを記載します。createメソッドは、submitボタンを押されると呼び出され、User情報を作成します。
app/controllers/user_controller.rb
class UserController < ApplicationController def create @user = User.new(params) # salt作成 @user.salt if @user.save redirect_to action: 'show', id: @user.id else flash[:notice] = 'Successfully checked in' redirect_to controller: 'home', action: 'index' end end end
上記の処理でcreateメソッドが呼び出されると、ActiveModel::ForbiddenAttributesErrorが発生します。
このエラーを防ぐために、下記のように修正します。
ActiveModel::ForbiddenAttributesErrorが発生しないように修正した処理
app/controllers/user_controller.rb
class UsesController < ApplicationController def create @user = User.new(user_params) # salt作成 @user.salt if @user.save redirect_to action: 'show', id: @user.id else flash[:notice] = 'Successfully checked in' redirect_to controller: 'home', action: 'index' end end private # Never trust parameters from the scary internet, only allow the white list through. def user_params params.require(:user).permit(:name, :password) end end
「params.require(:user).permit(:name, :password)」となっています。
このコードは「params が :user というキーを持ち、params[:user] は :name 及び :password というキーを持つハッシュであること」を検証しています。
上記の実装を追加することで、エラーなく実行することが可能になります。
まとめ
ActiveModel::ForbiddenAttributesErrorは簡単に修正できます。
しかし、rails3からアップデートする場合は、コード量次第ではそれなりの時間を取られるかもしれません。
面倒ですが、技術的負債はこまめに返してきましょう。
以上です。
0 件のコメント:
コメントを投稿