Ruby on rails 4 permit_参数不适用于自定义创建操作
我不明白为什么permit_params不能与自定义创建操作一起工作 例如,让我们以基本AdminUser资源为例 默认情况下,一切正常。我们有: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
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