- 公開日: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 件のコメント:
コメントを投稿