rake db:seed thorwing无法批量分配受保护的属性

时间:2012-05-08 06:27:08

标签: ruby-on-rails ruby ruby-on-rails-3 rake

我正在铁轨上学习红宝石。我正在创建一个存储用户信息的模型,当调用 rake db:seed 时,我收到以下错误,知道我缺少什么?

rake db:seed

require 'digest'
class User < ActiveRecord::Base
  attr_accessor :password 
  attr_accessible :email, :password
  validates :email, :uniqueness => true, 
                                    :length => {:within => 5..50},
                                    :presence => true

  validates :password, :confirmation => true, :length => { :within => 4..20 }, :presence => true, :if => :password_required?

  has_one :profile

  has_many :articles, :order => 'published_at DESC, title ASC',
                      :dependent => :nullify
  has_many :replies, :through => :articles, :source => :comments

  before_save :encrypt_new_password

  def self.authenticate(email, password)
    user = find_by_email(email)
        return user if user && user.authenticated?(password)
  end

  def authenticated?(password)
    self.hashed_password == encrypt(password)
  end


  def encrypt_new_password
    return if password.blank?
      self.hashed_password  = encrypt(password)                                                                                                                                                                                                                                                                                                                                                                                                                                                              
  end

  def password_required?
    hashed_password.blank? || password.present?
  end

 def encrypt(string)
   Digest::SHA2.hexdigest(string)
 end 

end




Can't mass-assign protected attributes: password_confrimation
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:48:in `process_removed_attributes'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:20:in `debug_protected_attribute_removal'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:12:in `sanitize'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security.rb:230:in `sanitize_for_mass_assignment'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/attribute_assignment.rb:75:in `assign_attributes'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/base.rb:498:in `initialize'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/persistence.rb:44:in `new'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/persistence.rb:44:in `create'
C:/Users/huzaifa.gain/My Documents/Aptana Studio 3 Workspace/blog/db/seeds.rb:6:in `<top (required)>'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:245:in `load'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:245:in `block in load'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:23

2 个答案:

答案 0 :(得分:6)

您必须将password_confirmation添加到attr_accessible

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

它应该有用。

答案 1 :(得分:1)

日志显示“无法批量分配受保护的属性:password_confrimation” 您需要将password_confrimation添加到用户模型

attr_accessible:password_confrimation