Rails 4:ActiveAdmin / Devise - 在ActiveAdmin中编辑用户时填写`reset_password_token`字段?

时间:2013-12-27 19:03:25

标签: ruby-on-rails devise activeadmin

所以我在User模型的后端运行授权上设计了Devise。我也有ActiveAdmin与此一起运行。

这是app / admin / user.rb:

ActiveAdmin.register User do

  # Specify which columns we want to appear in our ActiveAdmin index page
  index do
    column :name
    column :email
    column :class
    column :major
    column :biography

    # Adds view/edit/delete actions
    default_actions
  end

  controller do
    def permitted_params
      params.permit!
    end
  end
end

以下是问题:当用户注册时,他们的reset_password_token属性为空。所以说5个用户注册。然后我进入ActiveAdmin门户,尝试编辑用户的信息。好的,所以我编辑了第一个用户的名字;编辑页面如下所示:

enter image description here

填写major属性,例如,因为我想要更新。用户保存成功。

然后,在ActiveAdmin门户网站中,我继续编辑我的第二个用户,并编辑他的major属性。但是,当我点击Update User时,我收到错误,说:

QLite3::ConstraintException: column reset_password_token is not unique: UPDATE "actives" SET "encrypted_password" = ?, "reset_password_token" = ?, "major" = ?, "pledge_class" = ?, "biography" = ?, "current_sign_in_at" = ?, "last_sign_in_at" = ?, "updated_at" = ? WHERE "actives"."id" = 49

我假设发生此错误只是因为已经存在空白reset_password_token.的用户(如果我在reset_password_token字段中随机输入内容,则更新成功完成)。

对此有什么正常的解决方案?我是否以某种方式初始化reset_password_token?或者我每次更新用户时都必须随机输入一些东西...(看起来效率不高或逻辑性很差)。

谢谢!

1 个答案:

答案 0 :(得分:1)

字段reset_password_token不应该是表单的一部分。当用户请求密码重置时,它是Devise使用的内部字段。隐藏大部分Devise内部字段最好:

  • reset_password_token
  • 发送密码重置
  • 记得在
  • 创建
  • 当前登录
  • 最后一次登录
  • 等...