Я новичок в Ruby on Rails и зациклен на использовании обратных вызовов Active Record.Я знаю, как использовать их, но я пытаюсь действительно понять , что происходит, и я не понимаю этого.Моя путаница связана с переменными областями действия в Ruby.
Вот простой класс Active Record для пользователя с полями: электронная почта, password_hash, password_salt
class User < ActiveRecord::Base
attr_accessor :password
before_save :encrypt_password
#validation
validates :password, :confirmation => true
validates :email, :password, :presence => true
validates :email, :uniqueness => true
#When saving the user, encrypt the password
def encrypt_password
#First check if the password is present
if (password.present?)
#encrypt the password
self.password_salt = BCrypt::Engine.generate_salt
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
end
end
В методе "encrypt_password"Как доступна переменная «пароль»?Это то же самое, что self.password (объект var?), И это не то же самое, что @password?(почему?)
В самой процедуре шифрования я вызываю self.password_salt.Я заметил, что я могу просто ввести «password_salt» (без ссылки на себя), и это не работает.Почему бы и нет?Почему это отличается от @password_salt?
Извините, если это звучит как нубиш, я потратил пару часов на это, пытаясь понять это.