2015年12月1日火曜日

rails4 ActiveModel::ForbiddenAttributesErrorの対応

  • 公開日: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からアップデートする場合は、コード量次第ではそれなりの時間を取られるかもしれません。
面倒ですが、技術的負債はこまめに返してきましょう。

以上です。

Rails4の開発にオススメの本


Rubyの応用力をつけるのにオススメの本


運営サイト(railsで作成しています)


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...