7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

「ActiveModel::ForbiddenAttributesErrorの対処方法

Posted at

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!

#なぜエラーが発生したか?
このエラーが起きた状況は、Active Adminで作成したユーザー管理画面において編集機能を追加するために
actionsに:editを追加した所、Routing Error No route matches [PATCH] "/admin/users/1"が発生
して、それを解決した後、編集したデータを更新した際に発生いたしました。


ActiveModel::ForbiddenAttributesError in Admin::UsersController#update
ActiveModel::ForbiddenAttributesError

##なんのエラーか?

A(アンサー):Strong Parameters(ストロングパラメータ)関連のエラー

ActiveAdmin リソースの扱い

Rails 4 では attr_accessible の代わりに Strong Parameters が導入されました。これはホワイトリスト化されたアトリビュートをモデルからコントローラへ渡します。
どのパラメータが変化するかを定義する permit_params メソッドを用います。

Action Controller の概要 - Railsガイド

例えば、ブログを投稿するフォームを考えると公開日時や更新日時をユーザからのリクエストに基づいて設定できるというよりは、サーバ側でのレコード作成・更新の時間を記録するという場合が考えられます。
この例のようにクライアント側にどういったパラメータでのモデルの作成・更新を許可するか?というのを設定するのがストロングパラメータです。このストロングパラメータを介さずにモデルを作成・更新を行おうとすると冒頭で説明したActiveModel::ForbiddenAttributesErrorが発生します。

今回の場合、ユーザー情報の値を編集し、新しい値を更新しようとした場合どのパラメータの更新を許可するかを設定していないことが原因でした。

#解決方法

####参考記事

Strong Parameters について調べてみた(ActiveAdminの対応も含む)

ActiveAdmin Controllerの場合
冒頭にactive_admin:installで自動生成されたadmin_user.rbの controller do ブロックの中を書き換えます。

僕の場合は、admin/user.rbだったので

admin/user.rb

ActiveAdmin.register User do
…省略
  controller do
    def permitted_params
       {user: params.require(:user).permit(:email, :password, :password_confirmation)}
    end
  end
…省略
end

また、こちらの方法でもできました!

admin/user.rb

ActiveAdmin.register User do
…省略
  permit_params :email, :password, :password_confirmation

こんな感じに自分の環境用に変更が必要な値を設置したら無事解決いたしました。

##参考にした記事
【Rails】パラメータからcreateするときにはまったところメモ
I got ActiveModel::ForbiddenAttributesError, can't fix it. Please help.
リクエストパラメータの検証を行うStrongParameter(ストロングパラメータ)
ネストするStrong Parametersの書きかた
how to permit an array with strong parameters

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?