【问题标题】:permit_params not working for custom create actionpermit_params 不适用于自定义创建操作
【发布时间】:2014-01-15 10:57:39
【问题描述】:

我不明白为什么 permit_params 不能与自定义创建操作一起使用。

例如,让我们获取基本的 AdminUser 资源。

默认情况下一切正常。我们有:

ActiveAdmin.register AdminUser do
  permit_params :email, :password, :password_confirmation

  form do |f|
    f.inputs "Admin Details" do
      f.input :email
      f.input :password
      f.input :password_confirmation
    end
    f.actions
  end
end

但是,由于某些原因,我们添加自定义创建后 permit_params 将不再起作用。

ActiveAdmin.register AdminUser do
  permit_params :email, :password, :password_confirmation

  form do |f|
    f.inputs "Admin Details" do
      f.input :email
      f.input :password
      f.input :password_confirmation
    end
    f.actions
  end

  controller do
    def create
      AdminUser.create(params[:admin_user])
      do_some_magic_stuff_here
      redirect_to backend_admin_users_path, notice: 'Custom create'
    end
  end
end

在“AdminUser.create(params[:admin_user])”行中出现错误“ActiveModel::ForbiddenAttributesError”

尝试了许多可能的解决方案,只有一个对我有用,但我真的不喜欢这样:

def create
  AdminUser.create(params[:admin_user].permit(:email, :password, :password_confirmation))
  do_some_magic_stuff_here
  redirect_to admin_admin_users_path, notice: 'Custom create'
end

我不明白为什么我不能按照它应该工作的默认方式工作:

def admin_user_params
  params.require(:admin_user).permit(:email, :password, :password_confirmation)
end

谁能解释一下这里发生了什么?有什么好方法可以让自定义操作与 permit_params 一起使用?

【问题讨论】:

    标签: ruby-on-rails-4 activeadmin strong-parameters


    【解决方案1】:

    permit_params 只是 AA DSL 的一部分,它定义了一个名为 permitted_params 的方法,而该方法又从创建和更新操作中调用。试试这个:

    permit_params :email, :password, :password_confirmation
    
    controller do
      def create
        @admin_user = AdminUser.create(permitted_params)
        do_some_magic_stuff_here
        redirect_to backend_admin_users_path, notice: "Custom create"
      end
    end
    

    permit_params 实际上只是旧的一种更简单的形式,但仍然是启用强参数的有效方法:

    controller do
      def permitted_params
        params.permit admin_user: [:email, :password, :password_confirmation]
      end
    end
    

    【讨论】:

      【解决方案2】:

      在这里遇到同样的问题。最奇怪的是它可以在 nitrous.io 盒子上运行,但在我的生产服务器上却不行。我已经检查过了,我使用的是相同的 rails 4.2.0 版本。

      问候 假的

      【讨论】:

        猜你喜欢
        • 2012-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 2013-04-22
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        相关资源
        最近更新 更多