【Rails】ActiveAdminエラー対処法: permit_paramsを設定しているのに、ActiveModel::ForbiddenAttributesErrorが発生する

rails-prograshi(プロぐらし)-kv Rails
記事内に広告が含まれていることがあります。

Rails6にActiveAdminを導入し、既存のモデルと連携させた後、app/admin配下にあるActiveAdmin用のパラメータの設定で、permit_paramsを設定したにも関わらずActiveModel::ForbiddenAttributesErrorが発生するときの対処法。

対処法

通常のモデルの方にcreateメソッドを追加することで症状が改善しました。

app/models配下のモデルファイルに以下メソッドを追記。

class モデル名 < ApplicationRecord
  省略

  def create
    変数 = params[:モデル名(小文字)].permit(:カラム名3, :カラム名2,,,,)
    モデル名.create(変数)
  end

end


実例

app/models/client.rb を以下のように編集。

class Client < ApplicationRecord
  validates :pj_name, :client_name, exclusion: { in: [nil, ""] }, length: { in: 3..80 }
  validates :amount, numericality: { only_integer: true }

  def create
    @client = params[:client].permit(:pj_name, :client_name, :first_order_date, :amount, :image, :memo)
    Client.create(@client)
  end

end

なお、ActiveAdminの方のモデル操作用のファイルは以下。

ActiveAdmin.register Client do
  permit_params :pj_name, :client_name, :first_order_date, :amount, :image, :memo
end
タイトルとURLをコピーしました