permit_params不适用于自定义创建操作

时间:2014-01-15 10:57:40

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

我无法理解为什么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自定义操作的好方法都可以使用吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

此致 FAK