2012-05-08 4 views
2

Я изучаю рубин на рельсах. Я создаю модель для хранения информации о пользователе и при вызове rake db: seed, тогда я получаю следующую ошибку, любую идею, что мне не хватает?rake db: seed thorwing Невозможно назначить защищенные атрибуты

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 

ответ

6

Вы должны добавить password_confirmation к attr_accessible

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

и он должен работать.

+0

@Gainster: Убедитесь в том, чтобы использовать правильное имя атрибута и остерегайтесь опечаток. –

+0

Я следую за Начало Rails 3, Он не делает поля attr_accessible https://gist.github.com/326271 Так что я не понимаю, почему я должен сделать их доступными? – Gainster

+1

В зависимости от выпуска, который вы используете, Rails 3.2.3 внес изменения, которое по умолчанию защищает все модели. Прочтите примечания к выпуску для получения дополнительной информации. http://weblog.rubyonrails.org/2012/3/30/ann-rails-3-2-3-has-been-released/ – simonmorley

0

В журналах говорит: «Не удается массового правопреемником защищенные атрибуты: password_confrimation» вам нужно добавить password_confrimation для пользователя модели

attr_accessible: password_confrimation

Смежные вопросы