2014-02-01 3 views
0

Я получаю эту ошибку неопределенным методом `before_save 'для UserController: Class. Есть ли какая-то особая причина, почему before_save не определено?Rails 3 before_save не работает?

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

    attr_accessor :password 
    before_save :encrypt_password 
    before_save { self.email = email.downcase} 

....

def encrypt_password 
    if password.present? 
     self.password_salt = BCrypt::Engine.generate_salt 
     self.password_hash = BCrypt::Engine.hash_secret(password, password_salt) 
    end 
    end 

    def User.new_remember_token 
    SecureRandom.urlsafe_base64 
    end 

    def User.encrypt(token) 
    Digest::SHA1.hexdigest(token.to_s) 
    end 

    private 

    def create_remember_token 
     self.remember_token = User.encrypt(User.new_remember_token) 
    end 
end 
+2

Не могли бы вы разместить свой 'UserController'? – Zajn

+4

Контроллеры не имеют «before_save», только модели. – Mischa

+1

^Ах, спасибо огромное! Я просто изучаю рельсы, поэтому у меня есть дублирующий код внутри контроллера. – google1254

ответ

0

Независимо от того, был ли вы зафиксировали свою ошибку, я рекомендовал бы положить ваши before_save действия в единый метод (держать его DRY):

before_save :format_data 

    def format_data 
     self.email = email.downcase if email.present? 
     if password.present? 
      self.password_salt = BCrypt::Engine.generate_salt 
      self.password_hash = BCrypt::Engine.hash_secret(password, password_salt) 
     end 
    end 
Смежные вопросы