ActiveAdmin:无法批量分配受保护的属性:电子邮件、密码、密码确认

Posted

技术标签:

【中文标题】ActiveAdmin:无法批量分配受保护的属性:电子邮件、密码、密码确认【英文标题】:ActiveAdmin: Can't mass-assign protected attributes: email, password, password_confirmation 【发布时间】:2013-05-07 02:20:54 【问题描述】:

我有一个带有 ActiveAdmin 的 Rails 和 Devise for Authentication。我有 AdminUser 和 User 模型,因此 User 模型不必关心管理员。但是,我无法从 Admin 页面内部创建/编辑 Adminuser 和 User。每次我尝试这样做时,它都会给我消息

Can't mass-assign protected attributes: email, password, password_confirmation

这很奇怪,因为在 User 模型和 AdminUser 模型中,我已经有了:

attr_accessible :email, :password, :password_confirmation

为了尝试其他方式,我去了 Rails 控制台并尝试创建一个 AdminUser 并且一切正常:

AdminUser.create(:email => 'asdf@admin2.com', 
    :password => 'password', :password_confirmation => 'password')

这意味着只有从管理网页创建失败。

我正在使用 Devise 进行身份验证。 User 和 AdminUser 模型都会发生错误。

对于密码和密码确认,我在数据库中没有这些字段,但这是默认情况下 Devise 的方式,它在数据库中永远没有密码。

这是用户模型:

devise :database_authenticatable, :registerable, :rememberable, :recoverable, :trackable, :omniauthable, :omniauth_providers => [:facebook]
         ##, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :provider, :uid

  # attr_accessible :title, :body
    validates :email, :password, :first_name, :last_name,
              presence: true
    validates :email, uniqueness: true

  has_many :devices
  has_many :posts

【问题讨论】:

也许你必须将 ":as => :admin_user" 添加到你的 attr_accessible 中。我不知道 active_admin gem 的确切含义,但是例如,如果您使用此 gem github.com/fesplugas/typus,则必须使用 :as => :admin_user 指定当前用户的角色 我认为这个问题将帮助您更好地理解 :as => "your-role"..***.com/questions/6877853/… 您的管理员创建表单是什么样的?如果您列出可能有帮助的服务器日志。 【参考方案1】:

我变了

attr_accessible :email, :password, :password_confirmation, :remember_me, :provider, :uid

attr_accessible :email, :password, :password_confirmation, :remember_me, :provider, :uid, :as => [:default, :admin]

它有效。

【讨论】:

以上是关于ActiveAdmin:无法批量分配受保护的属性:电子邮件、密码、密码确认的主要内容,如果未能解决你的问题,请参考以下文章

无法批量分配受保护的属性:配置文件,

无法批量分配受保护的属性

“警告:无法批量分配受保护的属性”

嵌套表单触发“无法批量分配受保护的属性”警告

无法使用 Devise 批量分配受保护的属性以创建 has_many 嵌套模型

尝试将 Jcrop 添加到 Paperclip 时无法批量分配虚拟属性