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