【问题标题】:I'm getting an error when i try to add records to my db当我尝试将记录添加到我的数据库时出现错误
【发布时间】:2012-06-01 17:27:43
【问题描述】:

我正在使用在 Mac OS X Lion 上运行的 Rails 1.9.3。我正在尝试向我的数据库添加一条记录,但出现以下错误:

hisham-agil:twitster hisham$ rails console
Loading development environment (Rails 3.2.5)
1.9.3p194 :001 > User.new(name: 'hilarl', email: 'hilaal@gmail.com', password_digest: 'food', password_confirmation: 'food')
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: password_digest
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.5/lib/active_model/mass_assignment_security/sanitizer.rb:48:in `process_removed_attributes'
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.5/lib/active_model/mass_assignment_security/sanitizer.rb:20:in `debug_protected_attribute_removal'
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.5/lib/active_model/mass_assignment_security/sanitizer.rb:12:in `sanitize'
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.5/lib/active_model/mass_assignment_security.rb:230:in `sanitize_for_mass_assignment'
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.5/lib/active_record/attribute_assignment.rb:75:in `assign_attributes'
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.5/lib/active_record/base.rb:498:in `initialize'
    from (irb):1:in `new'
    from (irb):1
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.5/lib/rails/commands/console.rb:47:in `start'
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.5/lib/rails/commands/console.rb:8:in `start'
    from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.5/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

我的用户模型:

class User < ActiveRecord::Base
  attr_accessible :email, :name, :password, :password_confirmation


end

enter code here

我的数据库架构:

ActiveRecord::Schema.define(:version => 20120601171139) do

  create_table "users", :force => true do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at",      :null => false
    t.datetime "updated_at",      :null => false
    t.string   "password_digest"
  end

end

我使用默认的 sqlite3 作为数据库。

【问题讨论】:

  • 请从您的模型中提供更多和最新的代码,包括私有/受保护的方法。
  • class User
  • 好的。请参阅我修改后的答案。应该修复它。

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.1


【解决方案1】:

批量分配通常意味着将属性传递到创建对象的调用中,作为属性散列的一部分。

试试这个:

@user = User.new(name: 'hilarl', email: 'hilaal@gmail.com')
@user.password_digest = 'food'
@user.save

另见:

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

【讨论】:

  • 它仍然无法正常工作。似乎问题来自 password_confirmation 和 password_digest 字段。我可以成功地将记录添加到电子邮件和姓名字段
  • 对不起,没有注意到那里的密码确认。它不是数据库中的字段,仅用于验证密码是否输入错误。已相应地编辑了答案。
【解决方案2】:

password_digest 在您的用户模型中不是 attr_accessible。

将第一行改为:

attr_accessible :email, :name, :password, :password_confirmation, :password_digest

【讨论】:

  • 我已经添加了 :password_digest 但我仍然不断收到错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
相关资源
最近更新 更多