Ale*_*Vit 1 activeadmin strong-parameters ruby-on-rails-4
我不明白为什么 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
Run Code Online (Sandbox Code Playgroud)
但是,一旦我们添加自定义创建,由于某些原因,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
Run Code Online (Sandbox Code Playgroud)
我在“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
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我不能以默认方式工作,因为它应该工作:
def admin_user_params
params.require(:admin_user).permit(:email, :password, :password_confirmation)
end
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这里发生了什么吗?有什么好的方法可以让自定义操作与permit_params一起使用吗?
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
Run Code Online (Sandbox Code Playgroud)
permit_params实际上只是旧的更简单的形式,但仍然是启用强参数的有效方法:
controller do
def permitted_params
params.permit admin_user: [:email, :password, :password_confirmation]
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3056 次 |
| 最近记录: |