使用 ActiveAdmin 编辑/创建用户 -- ForbiddenAttributesError

Rya*_* Yu 4 ruby-on-rails activeadmin

我在这里浏览了 Rails 教程:

http://ruby.railstutorial.org/ruby-on-rails-tutorial-book

我正在尝试让 ActiveAdmin 能够删除用户。通过教程,我的用户模型has_secure_password也有一个remember_token属性。因此,当我转到 ActiveAdmin 用户页面并尝试编辑用户时,要填写的字段为:用户名、电子邮件、密码摘要、记住令牌。

例如,当我修改名称字段并尝试提交编辑请求时,我会得到一个ActiveModel::ForbiddenAttributesError. 当我尝试创建用户时也会发生这种情况。我认为这显然与我的身份验证/密码设置有关,但对于 Rails 来说相当陌生,我不知道从哪里开始寻找。有任何想法吗?

编辑:我尝试将其添加到我的 app/admin/user.rb 文件中:

controller do
  def resource_params
    return [] if request.get?
    [ params.require(:active).permit(:name, :email, :password_digest, :remember_token) ]
  end
end
Run Code Online (Sandbox Code Playgroud)

我的堆栈跟踪中的这个错误消失了:

Unpermitted parameters: utf8, _method, authenticity_token, commit, id

现在,当我update在 ActiveAdmin 中点击时,我不再收到 ForbiddenAttributesError。相反,页面会重新加载,但更改未提交,并且我在终端中收到此消息:

 Started PATCH "/admin/users/59" for ...
 ...
 ...
 (0.1ms)  begin transaction
 User Exists (0.5ms)  SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('example-58@railstutorial.org') AND "users"."id" != 59) LIMIT 1
 (0.2ms)  rollback transaction
Run Code Online (Sandbox Code Playgroud)

这是我的 users_controller.rb:

def update
  @active = Active.find(params[:id])
  if @active.update_attributes(active_params)
    flash[:success] = "Profile updated"
    redirect_to @active
  else
    render 'edit'
  end
end

private

  def active_params
    return [] if request.get?
    [ params.require(:active).permit(:name, :email, :password_digest, :remember_token) ]
  end
Run Code Online (Sandbox Code Playgroud)

Ric*_*eck 5

我具体不了解 ActiveAdmin,但您的错误表明您不允许您的id参数


参数

你的参数是这样的:

params.permit user: [:name, :email, :password_digest, :remember_token ]
Run Code Online (Sandbox Code Playgroud)

我首先尝试这个:

params.require(:user).permit(:name, :email, :password_digest, :remember_token)
Run Code Online (Sandbox Code Playgroud)

活动管理员

如何让 ActiveAdmin 使用强参数?

根据这个问题,你需要查看官方文档,也许可以尝试这个:

   config.before_filter do
       params.permit!
   end
Run Code Online (Sandbox Code Playgroud)