Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 permit_参数不适用于自定义创建操作_Ruby On Rails 4_Activeadmin_Strong Parameters - Fatal编程技术网

Ruby on rails 4 permit_参数不适用于自定义创建操作

Ruby on rails 4 permit_参数不适用于自定义创建操作,ruby-on-rails-4,activeadmin,strong-parameters,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 :p

我不明白为什么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_参数将不再工作

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\u user])行中得到了错误“ActiveModel::ForbiddenAttributeError”

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

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一起工作的任何好方法?

permit_params
只是AA DSL的一部分,AA DSL定义了一个名为
permited_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

我一直在努力解决同样的问题。最奇怪的是,它在nitrous.io box上工作,但在我的生产服务器上却不工作。我已经检查过了,我使用的是相同的rails 4.2.0版本

问候 Fak