Разница в следующем: хэш пароля - это строка - хэш пароля.Однако Password.new(self.password_hash)
создает новый объект класса Password
.Таким образом, разница: String
против Password
.Вы можете вызывать такие методы, как cost
, version
и т. Д. Для объекта Password
, которые недоступны для String
.
Полагаю, вы находите следующий метод странным:
def password=(new_password)
@password = Password.create(new_password)
self.password_hash = @password
end
, но здесь происходит не совсем очевидное преобразование объекта Password
в String
объект в self.password_hash
assignment - метод to_s
возвращает хэш пароля, и это значение сохраняется в базе данных.Более того - переменная экземпляра @password
установлена, поэтому метод password
будет возвращать экземпляр класса Password
, а не хэш пароля String
.